c中的二进制到十进制转换

时间:2015-07-20 07:32:36

标签: c

下面是我将二进制文件转换为十进制的代码,但我怀疑的是,当我输入数据为100000时,它给出了确切的答案。即使超出整数范围,它如何给出正确答案?

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);
}

3 个答案:

答案 0 :(得分:0)

您的代码的主要问题是您正在将二进制值读取为整数,然后将其作为整数进行操作。

scanf("%d",&bin);

这将读取整数的十进制表示形式并将其存储在bin中。因此,如果输入“100000”,则bin保持十进制值100000。

由于scanf没有读取二进制文件的选项,您需要做的是在用户的输入中读取字符串,然后检查每个字符以查看它是否为“0”或“1”并且基于此,将适当的值添加到deci

答案 1 :(得分: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

答案 2 :(得分:-1)

<强>更新 谢谢LưuVĩnhPhúc

int的最大可接受范围是4个字节,最多可达2147483647。 您将短类型(-32,768到32,767)混淆为int类型(-2,147,483,648到2,147,483,647)

Interger Type

整数下有多种类型,您可以从本文中了解更多:Data Type Ranges

您可以使用以下语句声明不同的int类型:

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

检查int64类型是谁!