最大正整數,即最高位(符號位)為0,其餘位皆為1.
-1所有位皆為1
-1右移一位即為最大正整數
但是直接右移是算術右移(所謂算術右移,是指左邊補符號位)
所以要先強制轉化成無符號,再右移,就是邏輯右移了
(所謂邏輯右移,是指左邊補0)
int max = ((unsigned)-1)>>1;
最小負整數,最高位為1,其餘皆為0。
即最大正數所有位取反,或最大正整數加1.
int min = ~((unsigned)-1)>>1;
int min = ~(((unsigned)-1)>>1);
ps:
為什麼不直接 0xffffffff>>1呢,或者直接 0x7fffffff 呢。
因為上述兩種寫法是假定int型別佔4位元組,然而int型別不一定佔4位元組,因為c標準中沒有對此做強制規定。如果int型別不是4位元組,上面兩種寫法顯然是錯的。
ps:為什麼不用 int_max, 因為閒的。
最小正整數
有乙個整數,除5餘3 除3餘2 除2餘1,求滿足條件的最小正整數。那麼while 1 其中1代表乙個常量表示式,他永遠不會等於0。所以,迴圈會一直執行下去。除非你設定break等類似的跳出迴圈語句迴圈 才會中止 include 最小正整數 續 加速 include using namespace s...
c 的最小整數和最大整數
include include using namespace std intmain 執行結果 1.int max,int min數值大小 因為int佔4位元組32位,根據二進位制編碼的規則,int max 2 31 1,int min 2 31.c c 中,所有超過該限值的數,都會出現溢位,出現...
C 超長正整數運算
文字檔案1.txt和2.txt分別儲存超長正整數,然後讀取兩個數進行加法 減法 乘法運算,如下 using system using system.collections.generic using system.linq using system.text using system.io usin...