2015-07-20 4 views
-2

Ниже приведен мой код для преобразования двоичного кода в десятичный, но я сомневаюсь, что когда я ввожу свои данные как 100000, он дает точный ответ. Как это дает правильный ответ, даже диапазон целого числа превышен?двоичное преобразование с десятичной точностью в c

int main() 
{int rem,deci=0,a=1,b; 
int bin; 

printf("size of int :- %d",sizeof(int)); 

printf("enter the binary value"); 
scanf("%d",&bin); 
while(bin!=0) 
{ 
    rem=bin%10; 
    deci=deci+rem*a; 
    a=a*2; 
    bin=bin/10; 
} 
printf("%d \n",deci); 
} 
+1

Каков ожидаемый и фактический результат этой программы? –

+2

100000 не находится за пределами диапазона 'int' практически на всех архитектурах/реализациях в наши дни. Если вы не видите строку 'size int: - 2', это не относится к вам. – Phylogenesis

+0

Он работает здесь. В чем проблема ? –

ответ

-1

Обновлено THANK в LUU Виньфук

максимально допустимый диапазон для междунар составляет 4 байта, который идет до 2147483647. Вы путаете короткий тип (32768 до 32767), с тип Int (-2147483648 до 2147483647)

Interger Type

Существует большое разнообразие типов, который идет под I nteger, вы можете узнать больше из этой статьи: Data Type Ranges

Вы можете объявить различные типы INT, используя эти заявления:

__int16 x = 16; 
__int32 x = 32; 
__int64 x = 64; 

Убедитесь, что Int64 тип whoof!

+0

неправильно. MSVC и все компиляторы, которых я знаю, никогда не меняют размер int. Размеры должны быть согласованы во всей сборке –

+0

Я предполагаю, что у меня был неправильный путь.спасибо Lu «Если значение превышает наибольшее целочисленное представление, компилятор Microsoft генерирует ошибку». –

0

Основная проблема с вашим кодом заключается в том, что вы читаете двоичное значение как целое число, а затем манипулируете им как таковым.

scanf("%d",&bin); 

Об этом говорится в десятичном представлении целого и сохраняет его в bin. Так что если вы входите в «100000», то bin имеет десятичное значение 100000.

Поскольку scanf не имеет возможности читать бинарными, что вам нужно сделать, это прочитать на входе пользователя в виде строки, а затем проверить каждый символ, чтобы увидеть, является ли это «0» или «1», и на основе этого добавьте правильное значение в deci.

+0

@ ravi-s Это ответ на ваш вопрос? – dbush

0

Чтобы узнать максимальное значение в диапазоне int в вашей реализации,
пожалуйста, проверьте значение постоянной INT_MAX, определенной в стандартном заголовочном limits.h.

<limits.h> 
<stdio.h> 
int main(void) 
{ 
    printf("Max. value: %d\n", INT_MAX); 
} 

Также вы можете получить информацию о границах других целых типов. Примеры:

printf("%ld", LONG_MAX); // For the maximum value of signed long  
printf("%lu", ULONG_MAX); // For the maximum value of unsigned long 
+0

да, я получил ответ .... я нашел свою ошибку благодаря –

Смежные вопросы