下面是我将二进制文件转换为十进制的代码,但我怀疑的是,当我输入数据为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);
}
答案 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)
整数下有多种类型,您可以从本文中了解更多:Data Type Ranges
您可以使用以下语句声明不同的int类型:
__int16 x = 16;
__int32 x = 32;
__int64 x = 64;
检查int64类型是谁!