8位字節表示的有符號數范圍是-128~127


1  計算機中數值都是按補碼來存儲的。

原碼(原碼是帶符號位的):第一位表示符號位,0表示正數,1表示負數。符號位加上真值的絕對值

比如  

   0 0 0 0   0 0 0 1  表示正1   

   1 0 0 0   0 0 0 1  表示負1

反碼:正數的反碼就是原碼, 負數的反碼是在其原碼的基礎上, 符號位不變,其余各個位取反(符號位不取反,數值位取反)

    0 0 0 0   0 0 0 1  表示正1   

  1 1 1 1   1 1 1 0  表示負1  

這時候就產生了一個問題,正零和負零用反碼表示不一致,這樣不合理

 0 0 0 0   0 0 0 0  表示正0

 1 1 1 1   1 1 1 1  表示負0

補碼:正數的補碼就是原碼,負數的補碼是在其原碼的基礎上, 符號位不變, 其余各位取反, 最后+1(反碼+1)

 0 0 0 0   0 0 0 0  表示正0

 0 0 0 0   0 0 0 0  表示負0

這樣 0 0 0 0   0 0 0 0  表示零了,正零和負零統一了

 

補碼的好處:

統一了0的表示

符號位也可以當作數值一樣參與運算

 

八位字節,算上符號能夠表示的范圍是2^8=256個數。

-128 ~ 127  正好是256個數

 

補碼  1 0 0 0 0  0 0 0 1  求原碼  ,表示的數是 - 127 

補碼 1 0 0 0 0  0 0 0 0  求原碼得出來的是0 0 0 0  0 0 0 0 ,這個是0的原碼 。這時,人為規定補碼 1 0 0 0 0  0 0 0 0 表示的值是-128 

所以 0 0 0 0   0 0 0 0  表示零

   1 0 0 0   0 0 0 0 表示-128 

---------------------------------------------------------------------

原碼和補碼的相互轉換

 

正數的補碼與原碼相同

9的補碼是 0000 1001

負數的補碼 ,先得到他的原碼,再得到反碼+1

-15   1000 1111  ===》 1111 0000   ===》  1111  0001 

 數0的補碼表示是唯一的    0000  0000 

 

已知補碼求原碼:

如果符號位是0  ,表示是一個正數,其原碼就是補碼

如果符號位是1  ,表示是一個負數,其原碼是 符號位不變,其余位取反后加1

補碼(1111 1001) 1000 0110   ==》 (原碼)1000 0111 

 


免責聲明!

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



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