short int 變量的取值范圍


為什么 C 語言中 short int (若為16位)變量的取值范圍是 -32768 ~ 32767 ??? 而並不是 -32767 ~ 32767.

1. 最高位為符號位;最高位為0表示正數,最高位為1表示負數;

2. 若以原碼表示,16位二進制原碼最大為 0111 1111 1111 1111 = 215 - 1 = 32767, 最小為 1111 1111 1111 1111 = -(215 - 1) = -32767, 0 有兩種表示方法,即正0 (0000 0000 0000 0000)和負0 (1000 0000 0000 0000);

3. 計算機中采用二進制補碼存儲數據;其中正數的補碼 = 原碼,負數的補碼 = 反碼 + 1;

4. 若以反碼表示,16位二進制范圍

  正數: 0000 0000 0000 0001 ~ 0111 1111 1111 1111 (1 ~ 32767) 

    正 0: 0000 0000 0000 0000

    負 0: 原碼 1000 0000 0000 0000, 補碼 1111 1111 1111 1111 + 0000 0000 0000 0001 = (1) 0000 0000 0000 0000

    負數: 

              原碼:1111 1111 1111 1111 (-32767),補碼:1000 0000 0000 0000 + 0000 0000 0000 0001 = 1000 0000 0000 0001

     原碼:1000 0000 0000 0001 (-1),       補碼:1111 1111 1111 1110 + 0000 0000 0000 0001 = 1111 1111 1111 1111

 請注意,再以補碼表示的16位二進制數中,0表示為 0000 0000 0000 0000,正數范圍為 (0000 0000 0000 0001 ~ 0111 1111 1111 1111),負數范圍為 (1000 0000 0000 0001 ~ 1111 1111 1111 1111);其中還有一個補碼 1000 0000 0000 0000尚未用到,於是人為的將這個補碼定義為實際中的數字 -32768.


免責聲明!

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



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