当我使用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溢出.
谢谢!
是的,你有一个溢出,因为int的范围是从-2 ^ 31到2 ^ 31 - 1,你试图计算从0到31的2的幂之和.你的最终值是结果:(2^0 + 2^1 + 2^3 + ... + 2^31) / 2这显然是大于2 ^ 31 - 1