程序:
#include<stdio.h>
int main()
{
unsigned long int i=1902;
int j=0;
while(j<10)
{
i=i*10;
printf("\n%lu",i);
j++;
}
}
为什么我只能获得最多5次迭代的正确结果?请帮助我获得所有迭代的正确答案。看到范围,我将int
更改为unsigned long int
,但仍无法更正错误。
答案 0 :(得分:3)
我的猜测是你使用的是Microsoft Visual Studio编译器的32位系统,或。我想这是因为unsigned long
似乎是32位,这意味着它可以达到的最大值略高于40亿。
如果你想要一个64位的值,你需要使用unsigned long long
,这几乎是所有类似PC的系统的64位。
答案 1 :(得分:0)
因为此时该值超出了unsigned long int可以表示的范围,从0到4,294,967,295。
答案 2 :(得分:0)
unsigned long int几乎是每个C编译器中的4个字节。
这里我用1902初始化。 您在每次迭代时将i的值乘以10。
签名long int的范围是-2,147,483,648到2,147,483,647。 通过使变量无符号,您只能将正整数的范围加倍,即从0到4,294,967,295。
变量i中的值在6次迭代后越过无符号整数的最大范围。因此显示溢出和负数。
如果要表示较大的数字,请使用大小为64位的long long int
,范围为-9223372036854775807至9223372036854775807。