我写了一个简单的C程序来找到我可以使用无符号整数达到的最大正数,如下所示。我机器上整数的大小是4个字节。
#include <stdio.h>
#include <math.h>
main()
{
unsigned int x = 1;
int i = 1;
for(; i <= 31; i++)
{
x = x * 2;
}
unsigned int y = pow(2, 31);
printf("%d\n", x);
printf("%d\n", y);
}
x
,y
正在溢出,值为-2147483648
。我认为它不应该溢出,因为在sizeof(int) = 4
字节,unsigned int
范围应为pow(2, 32) - 1
的机器上。任何人都可以告诉我为什么这会溢出来?
答案 0 :(得分:1)
您想将%u用于unsigned int:
printf("%u\n", x);
printf("%u\n", y);