0
我写了简单的C程序来找到我可以达到使用无符号整数,如下所示的最大正数。我机器上的整数大小是4个字节。无符号整数得到溢出在c
#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
。任何人都可以让我知道为什么这会溢出?
你打印出来作为符号的整数。改用'%u'。 – 2014-10-06 19:22:41
使用[错误的格式说明符](http://stackoverflow.com/q/16738218/1708801)是未定义的行为。 – 2014-10-06 19:22:49
如果这是高效代码,UINT_MAX可能会对您有所帮助。 – Jeremy 2014-10-06 19:59:51