为什么INT_MIN和INT_MAX似乎超出int类型的范围?

pap*_*uts 1 c

当我使用INT_MAX和INT_MIN常量时,我​​得到-2147483648 ... 2147483647.

但是当我尝试使用此函数计算int的最大值和最小值时:

static int computeInt(void)
{
    int myInt = 0;
    int min = 0;
    int max = 32;

    for (int i = min; i < max; i++)
    {
        myInt = myInt + pow(2, i);
    }

    myInt = myInt / 2;

    return myInt;
}
Run Code Online (Sandbox Code Playgroud)

我没有得到相同的号码.我认为发生的技术是myInt溢出.

谢谢!

nic*_*are 5

是的,你有一个溢出,因为int的范围是从-2 ^ 31到2 ^ 31 - 1,你试图计算从0到31的2的幂之和.你的最终值是结果:(2^0 + 2^1 + 2^3 + ... + 2^31) / 2这显然是大于2 ^ 31 - 1

  • 此外,即使最终值在范围内(例如减去额外的1),仍然存在工作中使用的某些中间值超出范围的问题. (2认同)