为什么会这样?我想象8 *= 2
会是16?我也试过了i += i
但得到了相同的输出。
从我的代码中可以看出,目标是获得2 ^ 1000。
#include <stdio.h>
#include <windows.h>
int main(int argc, char *argv[])
{
int i = 2;
int x;
for(x = 0; x < 1000; x++){
i*=2;
printf("%d\n", i);
Sleep(200);
}
printf("%d", i);
return 0;
}
输出:
4
8
10
20
40
80
100
200
400
800
1000
2000
4000
8000
10000
20000
40000
80000
100000
200000
400000
800000
1000000
2000000
4000000
8000000
10000000
20000000
40000000
80000000
0
答案 0 :(得分:11)
我不认为这是您正在运行的实际代码。我想你实际上得到了:
printf("%x\n", i);
由于您还有一个名为x
的变量,所以这将是一个简单的拼写错误。
或者,也许您以某种方式更改了整数打印基数。结果 加倍,但您似乎以十六进制打印它们。
0x004 = 4 decimal
0x008 = 8 decimal
0x010 = 16 decimal
0x020 = 32 decimal
0x040 = 64 decimal
0x080 = 128 decimal
0x100 = 512 decimal
答案 1 :(得分:1)
sizeof(int)很可能是系统上的32位。尝试使用unsigned long而不是int。 sizeof(long)应该是64位,并且通过在前面放置'unsigned'将为正数提供更宽的范围。
对于printf()一个无符号长整数,使用%lu
答案 2 :(得分:1)
看起来数字以十六进制显示。我不知道为什么。顺便说一句,你永远不会达到2 ^ 1000,因为32位整数可以存储的最高数字是2 ^ 32 - 1.