c獲取最大正整數,最小負整數

2022-10-10 23:03:12 字數 533 閱讀 4930

最大正整數,即最高位(符號位)為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...