2014-10-06 75 views
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); 
} 

两个xy越来越泛滥,价值-2147483648。我认为它不应该溢出,因为在sizeof(int) = 4字节的机器上,unsigned int范围应该是pow(2, 32) - 1。任何人都可以让我知道为什么这会溢出?

+2

你打印出来作为符号的整数。改用'%u'。 – 2014-10-06 19:22:41

+2

使用[错误的格式说明符](http://stackoverflow.com/q/16738218/1708801)是未定义的行为。 – 2014-10-06 19:22:49

+0

如果这是高效代码,UINT_MAX可能会对您有所帮助。 – Jeremy 2014-10-06 19:59:51

回答

1

你想用%u表示unsigned int类型:

printf("%u\n", x); 
printf("%u\n", y); 
+0

优秀。我错过了小事。 – kadina 2014-10-06 20:47:08