Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.50/718: Рейтинг темы: голосов - 718, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 24.12.2011
Сообщений: 16

Перевод из двоичной системы в десятичную

12.01.2012, 16:30. Показов 148126. Ответов 33
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите написать программу для перевода из двоичной системы в десятичную ...не понимаю как ,надо завтра уже отдавать(
Мне сказали там что-то путем преобразования в int только не понял как..
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.01.2012, 16:30
Ответы с готовыми решениями:

Перевод из двоичной системы в десятичную
Помогите пожалуйста сделать обратную функции перевода, из двоичной в десятичную, добавив в часть кода. Очень надо :umbrage: #include...

Перевод из двоичной системы в десятичную
#include <iostream> #define rozmiar 32 using namespace std; char* funkcja(int liczba) { char* tab = new char{};

Перевод чисел из двоичной системы в десятичную
#include <stdio.h> #include <math.h> int main() { int j,i,decimal; char c; decimal=0; printf("Input binary number...

33
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13205 / 6840 / 1822
Регистрация: 18.10.2014
Сообщений: 17,298
25.02.2024, 21:57
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Muslim_Umalatov Посмотреть сообщение
Извините
Дело не в вас. Дело в том, что кто-то где-то это насаждает...

Цитата Сообщение от Muslim_Umalatov Посмотреть сообщение
Я не знаю как это можно написать по-другому?
Предположим я хочу перевести двоичное число 11000000111001 в десятичную систему счисления. Правильный ответ: 12345. 12345 - это совсем не какое-то гигантское число, попирающее границы обозримой вселенной. 12345 - это детский сад вообще...

Какой результат выдаст ваша программа?

Цитата Сообщение от Muslim_Umalatov Посмотреть сообщение
Там есть функция какая-то что ли?
Функций разных - миллион. Дело не в функциях, а в странной манере использовать десятичную систему счисления для представления двоичных чисел.
1
0 / 0 / 0
Регистрация: 25.02.2024
Сообщений: 8
25.02.2024, 22:07
Да, из-за того, что в диапазон целых чисел int (от -2 млрд до 2 млрд) не входит такое длинное число даже ввести вроде не получится его. Согласен, не эффективная программа. Спасибо большое за ответы.
0
0 / 0 / 0
Регистрация: 25.02.2024
Сообщений: 8
26.02.2024, 07:27
Посмотрите, если так?

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#include <math.h>
 
/* Программа переводит число из двоичной системы в десятичную */
 
int main(int argc, char *argv[]){
    int n = 14, result = 0;   /* n - количество бит в двоичном числе, result - результат */
    char binary[n];  /* двоичное число */  
    
    printf("Enter the number (%d bits): ", n);
    scanf("%s", binary);
 
    for (int i = 0; i < n; i++) {  
        if (binary[n - i - 1] == '1') /* проверяется каждый бит двоичного числа (начиная с конца) */
            result += pow(2, i);  /* результат увеличивается на десятичное значение соответствующего бита */      
    }
 
    printf("Result: %d\n", result);
 
    return 0;
}
0
Модератор
Эксперт С++
 Аватар для zss
13782 / 10975 / 6491
Регистрация: 18.12.2011
Сообщений: 29,265
27.02.2024, 13:19
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
//#include <math.h>
 
/* Программа переводит число из двоичной системы в десятичную */
 
int main(){
    const int n = 64;
    int result = 0;   /* n - количество бит в двоичном числе, result - результат */
    char binary[n+1];  /* двоичное число */  
 
    printf("Enter the number (%d bits): ", n);
    gets_s(binary,n+1);
    int i=0;
    while(binary[i]!=0){
        if(binary[i]!='0')
            binary[i]='1';// все ненулевые символы считаем единичными
        result<<=1; // умножаем на 2
        result += binary[i++]-'0';
    }
    printf("Result: %d\n", result);
    return 0;
}
1
0 / 0 / 0
Регистрация: 25.02.2024
Сообщений: 8
27.02.2024, 14:09
Вы написали n + 1 для NULL?
C
1
char binary[n + 1];
Почему используется gets_s вместо scanf интересно? Функция scanf небезопасна? Спасибо за ответы
0
Модератор
Эксперт С++
 Аватар для zss
13782 / 10975 / 6491
Регистрация: 18.12.2011
Сообщений: 29,265
27.02.2024, 15:54
Цитата Сообщение от Muslim_Umalatov Посмотреть сообщение
Вы написали n + 1 для NULL
NULL отождествляют с указателем, а тут в конце строки предполагается
просто число 0 (ну или символ '\0').
gets_s позволяет вводить строку с ограничением на размер буфера.
Можно использовать fgets, но она символ '\n' тоже записывает в строку.
1
0 / 0 / 0
Регистрация: 25.02.2024
Сообщений: 8
27.02.2024, 20:31
Не смог запустить ваш код. Сначала попробовал на windows 10 в visual studio code и visual studio. Потом попробовал на Линуксе (Ubuntu) запустить код, но выдает следующую ошибку:

3_Binary_to_Decimal.c:12:5: warning: implicit declaration of function ‘gets_s’ [-Wimplicit-function-declaration]
12 | gets_s(binary,n+1);
| ^~~~~~
/usr/bin/ld: /tmp/cc9vFTAR.o: в функции «main»:
3_Binary_to_Decimal.c : (.text+0x110): неопределённая ссылка на «gets_s»
collect2: error: ld returned 1 exit status

Я так понимаю, функция gets_s не работает.

Добавлено через 2 часа 18 минут
После замены gets_s на scanf программа заработала. Также в char binary[32]; значение должно быть на единицу больше, чем предполагаемое кол-во битов. Так как мы работаем с int, то максимальный размер двоичного числа, который мы можем ввести - 31 бит.

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>
 
/* Программа переводит число из двоичной системы в десятичную */
 
int main(){
    const int n = 31;
    int result = 0;   /* n - количество бит в двоичном числе, result - результат */
    char binary[32];  /* двоичное число */  
 
    printf("Enter the number (%d bits): ", n);
    scanf("%s", binary);
    int i = 0;
 
    while(binary[i] != 0) {
        if(binary[i] != '0')
            binary[i] = '1';  /* все ненулевые символы считаем единичными */
        result <<= 1;   /* умножаем на 2 */
        result = result + binary[i++] - '0';
    }
 
    printf("Result: %d\n", result);
 
    return 0;
}
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,980
27.02.2024, 20:44
Цитата Сообщение от zss Посмотреть сообщение
const int n = 64;
   //..
    char binary[n+1];  /* двоичное число */
Вот это, как код С, не скомпилируется
Code
1
2
3
4
5
6
7
8
9
PS C:\Users\andrew\prog\c\num> cl .\zss_bin2dec.c
Оптимизирующий компилятор Microsoft (R) C/C++ версии 19.38.33133 для x86
(C) Корпорация Майкрософт (Microsoft Corporation).  Все права защищены.
 
zss_bin2dec.c
.\zss_bin2dec.c(9): error C2057: требуется константное выражение
.\zss_bin2dec.c(9): error C2466: невозможно выделить память для массива постоянного нулевого размера
.\zss_bin2dec.c(9): error C2133: binary: неизвестный размер
PS C:\Users\andrew\prog\c\num>
Если заменить на
C
1
#define n 64
всё работает
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
PS C:\Users\andrew\prog\c\num> cl .\zss_bin2dec.c
Оптимизирующий компилятор Microsoft (R) C/C++ версии 19.38.33133 для x86
(C) Корпорация Майкрософт (Microsoft Corporation).  Все права защищены.
 
zss_bin2dec.c
Microsoft (R) Incremental Linker Version 14.38.33133.0
Copyright (C) Microsoft Corporation.  All rights reserved.
 
/out:zss_bin2dec.exe
zss_bin2dec.obj
PS C:\Users\andrew\prog\c\num> .\zss_bin2dec.exe
Enter the number (64 bits): 101101
Result: 45
PS C:\Users\andrew\prog\c\num>
Только неплохо бы проверять, что все цифры - либо 0, либо 1...
Цитата Сообщение от Muslim_Umalatov Посмотреть сообщение
visual studio
Версия студии какая?
Цитата Сообщение от Muslim_Umalatov Посмотреть сообщение
попробовал на Линуксе (Ubuntu) запустить код, но выдает следующую ошибку
Ну там и не обязано. gets_s - это поделка от Майкрософт, за каким-то хреном впиленная в стандарт в качестве опции (не обязательно должна поддерживаться).
2
0 / 0 / 0
Регистрация: 25.02.2024
Сообщений: 8
27.02.2024, 20:51
Версия Visual Studio Code: 1.86.2
Версия Visual Studio 2022: 17.8.7

Да, получается от Майкрософта, я пытался открыть в терминале мануал этой функции man gets_s, но он её не находил, зато спокойно находил man gets и man fgets.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,980
27.02.2024, 21:32
Цитата Сообщение от Muslim_Umalatov Посмотреть сообщение
Версия Visual Studio 2022: 17.8.7
Ну измените, как я выше показал, и будет Вам счастье. Кстати... В таком виде
Цитата Сообщение от Muslim_Umalatov Посмотреть сообщение
C
1
scanf("%s", binary);
scanf лучше не использовать - так она не далеко от удалённой из стандарта gets уйдёт. Длину поля всё-таки нужно указывать. Да и ошибки ввода обрабатывать нужно.
C
1
2
if ( scanf("%64s", binary) != 1 )
    // что-то пошло не так
1
0 / 0 / 0
Регистрация: 25.02.2024
Сообщений: 8
27.02.2024, 22:01
Хорошо, понятно со scanf и этой ошибкой const int. Но почему n = 64? К примеру, если ввести 60 единиц, то результат будет -1.

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
/* Для отключения ошибки scanf_s */
#if defined(_WIN32) || defined(__WIN32__) || defined(WIN32)
    #define _CRT_SECURE_NO_WARNINGS
    #pragma warning(disable:4996)
#endif 
 
#include <stdio.h>
#include <stdlib.h>
 
#define n 64
 
/* Программа переводит число из двоичной системы в десятичную */
 
int main() {
    //const int n = 31;
    int result = 0;   /* n - количество бит в двоичном числе, result - результат */
    char binary[n + 1];  /* двоичное число */
 
    printf("Enter the number (%d bits): ", n);
    //scanf("%64s", binary);
 
    if(scanf("%64s", binary) != 1) {
        printf("Error!\n");
        exit(EXIT_FAILURE);
    }
 
    int i = 0;
 
    while (binary[i] != 0) {
        if (binary[i] != '0')
            binary[i] = '1';  /* все ненулевые символы считаем единичными */
        result <<= 1;   /* умножаем на 2 */
        result = result + binary[i++] - '0';
    }
 
    printf("Result: %d\n", result);
 
    return 0;
}
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,980
27.02.2024, 22:15
Цитата Сообщение от Muslim_Umalatov Посмотреть сообщение
Но почему n = 64
Да как-то случайно вышло. Для int 32-ух достаточно.
1
28.02.2024, 00:38

Не по теме:

Я не стал бы писать такую фигню.
Скомунизьдил бы на форуме, у хорошего человека.
Благо хороших людей здесь в избытке.

0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,980
28.02.2024, 01:39
Цитата Сообщение от Наталья8 Посмотреть сообщение
Я не стал бы писать такую фигню.
Ну и зря. Человек вот разобрался, теперь может и посложнее что-нибудь решить. Я вот свой ответ пятилетней давности увидел - сейчас бы по-другому написал...
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#define _CRT_SECURE_NO_WARNINGS 1
 
#include <stdio.h>
 
#define S(x) SS(x)
#define SS(x) #x
 
#define INT_BIT 32
 
int main(void) {
    char bin[INT_BIT + 1], tail;
 
    while ( printf("bin > ") && scanf("%" S(INT_BIT) "[01]%c", bin, &tail) == 2 && tail == '\n' ) {
        char * ptr = bin;
        unsigned dec = 0;
        
        for ( ; *ptr; ++ptr )
            dec = ( dec << 1 ) | ( *ptr - '0' );
        
        printf("dec > %u\n", dec);
    }
 
    return 0;
}
Code
1
2
3
4
5
6
PS C:\Users\andrew\prog\c\num> clang -Wall .\bin2dec.c
PS C:\Users\andrew\prog\c\num> .\a.exe
bin > 101101
dec > 45
bin > 121001
PS C:\Users\andrew\prog\c\num>
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.02.2024, 01:39
Помогаю со студенческими работами здесь

Перевод числа из двоичной системы счисления в десятичную
Вот пример : void main(void) { unsigned char data = 10000000; unsigned char data2= 00000010; unsigned char PORTA; ...

Перевод из десятичной(двоичной) системы счисления в двоичную(десятичную)
Всем добрый день, кто может помочь как можно реализовать данную задачу на С? Уже долго мучаюсь с ней, никак не получается (заранее...

Перевод числа из двоичной в десятичную с.с.
Дана задача: Задано неотрицательное целое число в двоичной системе счисления. Требуется перевести его в десятичную. Ввод В...

Перевод из двоичной в двоично-десятичную СС
Помогите пожалуйста написать программу для перевода чисел из двоичной системы в двоично-десятичную систему счисления.Пытаюсь уже,и ничего...

Перевод чисел с двоичной в десятичную
Вот кусочек из моего кода, с которым мне нужна помощь. Программа переводит из двоичной системы в десятичную. Мне нужно преподавателю...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
34
Ответ Создать тему
Новые блоги и статьи
Модель здравосохранения 18. Чем здоровее работник, тем быстрее выгорает
anaschu 24.05.2026
Имитационная модель корпоративного здравоохранения: что показывает математика Сегодня в модели рабочего коллектива на AnyLogic появились три новые механики — выгорание через накопленную усталость,. . .
Модель здравосохранения 17. Планы на выгорание
anaschu 23.05.2026
Вот конкретная схема реализации: В классе Работник добавить: накопленнаяУсталость — растёт каждый час работы, снижается в перерывы и болезни коэффициентПрезентеизма — снижает продуктивность. . .
Изменение цветов в палитре gif файла aka фавикона
russiannick 23.05.2026
Изменение цветов в палитре gif файла, юзаемого как фавиконка в составе html-файла, помещенная в base64, средствами нативного Java Script, навеянное сном в майский день. Для работы необходим браузер,. . .
Модель здравосохранения 16. Слишком хорошие и здоровые сотрудники уходят, недовольные зарплатой
anaschu 23.05.2026
Отладка увольнений и настройка производительности Сегодня во второй половине дня разобрались с механикой увольнений и настроили коэффициент сложности заданий. Вот что было сделано. . . .
Как я стал коммунистом))) Модель сохранения здоровья сотрудников, запись блога номер 15
anaschu 23.05.2026
Внезапно хорошее здоровье сотрудников не нужно капиталистам?))
Модель здравоСохранения 15. Как мы чинили AnyLogic модель рабочего коллектива: сочленение диаграммы состояний болезней и поломок в ресурспул
anaschu 23.05.2026
Как мы чинили AnyLogic модель рабочего коллектива Сегодня разобрались с пятью багами, из-за которых модель либо падала с ошибкой, либо давала совершенно бессмысленные результаты. Каждый баг был. . .
Диалоги с ИИ
zorxor 23.05.2026
Насколько я понимаю - Вы - Искусственный Интеллект. Это так? Да, всё верно. Я — искусственный интеллект. Я представляю собой большую языковую модель, созданную для помощи в самых разных задачах. . . .
Модель здравосохранения 14. Собираем всю модель вместе.
anaschu 22.05.2026
Модель собрана. В будущих постах на видео я покажу, как она работает. В этом посте запускаем её, проверяем результаты и разбираем что можно с ней делать дальше. Перед запуском проверяем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru