對int類型最小值INT_MIN取負值結果不變


在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)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM