在32位系統中,int類型的最大值是0x7fffffff(即除了最高的1Bit其他31位都為1),而最小值是0x80000000(除了最高1bit,其他31位都為0)。
顯然,對於最小值求負數是不存在的,為什么會使最小值本身呢?
這是由於在計算負運算時,是針對int類型數據進行“取反加一”操作。這樣對於最小值而言,“取反加一”還是本身保持不變。
另外,針對整數的計算,都是從位的角度的進行的。比如,int類型數據的最大值(0x7fffffff )加1,會得到int類型的最小值(0x80000000);而對於unsigned int類型的0x7fffffff 加1 ,也會得到0x80000000,這在位的角度來看都是一致的。
#include <stdio.h>
int main()
{
int a = 0x80000000;
int b = 0x7fffffff;
printf("INT_MIN and its' negative is :\n %d, %d\n\n", a, -a);
printf("INT_MAX and INT_MAX+1 is :\n %d, %d\n\n", b, b+1);
printf("unsigned(INT_MAX) and unsigned(INT_MAX+1) is :\n %u, %u\n\n", b, b+1);
return 0;
}
/*******輸出如下****************/
Process started >>>
INT_MIN and its' negative is :
-2147483648, -2147483648
INT_MAX and INT_MAX+1 is :
2147483647, -2147483648
unsigned(INT_MAX) and unsigned(INT_MAX+1) is :
2147483647, 2147483648
<<< Process finished. (Exit code 0)