有符號的整數:
原碼 反碼 補碼
+1 0000 0001 0000 0001 0000 0001(正數的原碼、反碼和補碼相同)
-1 1000 0001 1111 1110 1111 1111(負數的反碼是原碼除符號位取反,補碼是反碼加1)
數值有正負之分,計算機就用一個數的最高位存放符號(0爲正,1爲負)。這就是機器數的原碼了,假設機器能處理的位數爲8,原碼能表示的數值範圍爲-127到-0,+0到127總共256個。
有了數值的表示方法就能夠對數進行算術運算。可是很快發現用帶符號位的原碼進行乘除運算時結果正確,而在加減運算時就出現了問題,誰都知道,1 - 1 = 1 + (-1) = 0
1的原碼 0000 0001,-1的原碼 1000 0001,若是咱們用原碼來計算的話有1 - 1 = 1 + (-1) = 0000 0001 + 1000 0001 = -2,這顯然不正確。
由於在兩個整數的加法運算中是沒問題的,因而就發現問題出如今帶負號位的負數身上,對除符號位外的其他各位逐位取反就產生了反碼,反碼的取值空間和原碼相同且一一對應,下面是反碼的減法運算:
1的反碼 0000 0001,-1的反碼 1111 1110,1 - 1 = 1 + (-1) = 0000 0001 + 1111 1110 = 1111 1111 = (-0)有問題。
問題出如今+0和-0上,在人們的計算概念中零是沒有正負之分的(印度人首先將零做爲標記放入運算之中,包含有零號的印度數學和十進制計數對人類文明的貢獻極大)
因而就引入了補碼的概念,在補碼中用-128代替了-0,因此補碼的表示範圍爲-128到0到127共256個
注意:-128沒有相對應的原碼和反碼-128 = 1000 0000
補碼的加減運算
0000 0001 + 1111 1111 = 0000 0000 = 0 正確
因此補碼的設計目的是:1)是符號位能和有效值部分一塊兒參加運算,從而簡化運算規則。2)使減法運算轉換爲加法運算,進一步簡化計算機中運算器的線路設計。
兩個補碼錶示的數相加時,若是最高位(符號位)有進位,則進位被捨棄。
補碼和原碼的轉換過程幾乎是相同的。
模的概念:模是一個計量系統的計數範圍,模其實是計量器產生溢出的量,它的值在計量器上表示不出來,計量器上只能表示出模的餘數。任何有模的計量器,都可化減法爲加法運算。
對模而言存在一對補數,它們相加等於模,減一個數至關於加上它的補數。對於計算機而言,方法同樣,把補數用到計算機對數的處理上就是補碼的概念。