背景問題:你知道計算機中以什么形式存儲整數(shù)嗎?是符號位加值位嗎?值位是按照正常的二進制方式存儲的嗎?假如用3位二進制進行存儲,符號位0正1負,1是存成001,-1是存成101嗎?

答:使用補碼的方式而不是正常的方式存儲,雖然是符號位加值位,但符號位承載的信息和值位的值不是你想象中的方式,比如用3位二進制進行存儲,符號位0正1負,1會存成001,-1會存成111 

首先來回憶一下剛學(xué)計算機時候的教材里是怎么解釋補碼的:

- 原碼表示法是機器數(shù)的一種簡單的表示法。其符號位用0表示正號,用1表示負號,數(shù)值一般用二進制形式表示。
- 機器數(shù)的反碼可由原碼得到。如果機器數(shù)是正數(shù),則該機器數(shù)的反碼與原碼一樣;如果機器數(shù)是負數(shù),則該機器數(shù)的反碼是對它的原碼(符號位除外)各位取反而得到的。
- 機器數(shù)的補碼可由原碼得到。如果機器數(shù)是正數(shù),則該機器數(shù)的補碼與原碼一樣;如果機器數(shù)是負數(shù),則該機器數(shù)的補碼是它的反碼在未位加1而得到的。
- 現(xiàn)代計算機中普遍使用補碼表示法,而不是原碼。

 WTF!WHY?!

OK,下面我們來一一解答

 

一、計算機為什么使用補碼的形式存儲整數(shù)

  出于簡化計算機基本電路的考慮,讓加減法都只需要用加法電路實現(xiàn)。所以需要把減去一個正數(shù)或加上一個負數(shù)都用加上一個正數(shù)的方式來表示,于是在存儲的時候,負數(shù)被直接存儲成一種可以直接當(dāng)成正數(shù)來相加的形式 (正數(shù)不變,所以以后的討論中有時候略去正數(shù)),這種形式就是補碼

延伸閱讀

學(xué)習(xí)是年輕人改變自己的最好方式-Java培訓(xùn),做最負責(zé)任的教育,學(xué)習(xí)改變命運,軟件學(xué)習(xí),再就業(yè),大學(xué)生如何就業(yè),幫大學(xué)生找到好工作,lphotoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)學(xué)習(xí)是年輕人改變自己的最好方式