无符号整数在c中溢出

时间:2014-10-06 19:20:55

标签: c

我写了一个简单的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);
}

xy正在溢出,值为-2147483648。我认为它不应该溢出,因为在sizeof(int) = 4字节,unsigned int范围应为pow(2, 32) - 1的机器上。任何人都可以告诉我为什么这会溢出来?

1 个答案:

答案 0 :(得分:1)

您想将%u用于unsigned int:

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