C++中的最大整數最小整數


調用<limits.h>

INT_MIN, INT_MAX

利用原碼、補碼、反碼及位運算

  1. 機器數與真值
    機器數:在計算機中實際存儲的數,如0000 0001
    真值:去掉符號位,根據編碼規則推導出的真實值
  2. 原碼
    原碼就是符號位加上真值的絕對值, 即用第一位表示符號, 其余位表示值。(一種非常容易理解的方式)

正負1的原碼表示:

[+1] = 0000 0001
[-1] = 1000 0001

8位二進制數,原碼能表示的范圍為:

[0111 1111 1111 1111]---->[2^7-1 -2^7-1]---->[-127 127]
  1. 反碼
    反碼就是在原碼的基礎上,符號位不變,其余位取反。 (顯然,正數的反碼還是本身)
    正負1的反碼表示:
[+1] = 0111 1110
[-1] = 1111 1110
  1. 補碼
    正數的補碼就是本身,復數的補碼就是其反碼加一
    正負1的補碼表示:
[+1] = 0000 0001 (補)
[-1] = 1111 1110(反)= 1111 1111(補) 
  1. 為什么要用補碼進行運算?
    將減法簡化為加法(減去一個正數等於加上這個正數的相反數),且保持只有一個0的表示。(https://blog.csdn.net/wo17fang/article/details/52241682)

6.表示最大最小的整數
看了上面的解釋,下面的定義就是自然而然了

int max_int = 0b0111 1111 1111 1111;
int min_int = max_int+1;

進一步簡寫為:

#define MAX_INT (((unsigned int)(-1))>>1)
#define MIN_INT MAX_INT+1


免責聲明!

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



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