什么是補碼可以舉例說明一下嗎
數值有正負之分,計算機就用一個數的最高位存放符號(0為正,1為負).這就是機器數的原碼了.假設機器能處理的位數為8.即字長為1byte,原碼能表示數值的范圍為
(-127~-0+0~127)共256個.
有了數值的表示方法就可以對數進行算術運算.但是很快就發現用帶符號位的原碼進行乘除運算時結果正確,而在加減運算的時候就出現了問題,如下:假設字長為8bits
(1)10-(1)10=(1)10+(-1)10=(0)10
(00000001)原+(10000001)原=(10000010)原=(-2)顯然不正確.
因為在兩個整數的加法運算中是沒有問題的,于是就發現問題出現在帶符號位的負數身上,對除符號位外的其余各位逐位取反就產生了反碼.反碼的取值空間和原碼相同且一一對應.下面是反碼的減法運算:
(1)10-(1)10=(1)10+(-1)10=(0)10
(00000001)反+(11111110)反=(11111111)反=(-0)有問題.
(1)10-(2)10=(1)10+(-2)10=(-1)10
(00000001)反+(11111101)反=(11111110)反=(-1)正確
問題出現在(+0)和(-0)上,在人們的計算概念中零是沒有正負之分的.(印度人首先將零作為標記并放入運算之中,包含有零號的印度數學和十進制計數對人類文明的貢獻極大).
于是就引入了補碼概念.負數的補碼就是對反碼加一,而正數不變,正數的原碼反碼補碼是一樣的.在補碼中用(-128)代替了(-0),所以補碼的表示范圍為:
(-128~0~127)共256個.
注意:(-128)沒有相對應的原碼和反碼,(-128)=(10000000)補碼的加減運算如下:
(1)10-(1)10=(1)10+(-1)10=(0)10
(00000001)補+(11111111)補=(00000000)補=(0)正確
(1)10-(2)10=(1)10+(-2)10=(-1)10
(00000001)補+(11111110)補=(11111111)補=(-1)正確
所以補碼的設計目的是:
⑴使符號位能與有效值部分一起參加運算,從而簡化運算規則.
⑵使減法運算轉換為加法運算,進一步簡化計算機中運算器的線路設計
補碼相加怎么算的
補碼:機器數的補碼可由原碼得到。
如果機器數是正數,則該機器數的補碼與原碼一樣;
如果機器數是負數,則該機器數的補碼是對它的原碼(除符號位外)各位取反,并在末位加1而得到的。
負數用補碼表示后,可以和正數一樣來處理。這樣,運算器里只需要一個加法器就可以了,不必為了負數的加法運算,再配一個減法器。
補碼加法的公式是:
[x]補+[y]補=[x+y]補(mod2)(2.17)
-22補碼怎么算的
計算-22的補碼有以下步驟:
1.確定原碼:-22的原碼是10010110。
2.確定反碼:反碼是將原碼中的符號位保持不變,其余位按位取反。所以,-22的反碼是11101001。
3.確定補碼:補碼是在反碼的基礎上加1。所以,-22的補碼是11101010。
計算-22的補碼的步驟是先確定原碼,然后確定反碼,最后確定補碼。需要注意的是,負數的補碼表示是根據計算機中使用的存儲機制和二進制表示法來確定的,這與實際的數值大小關系有關。
30-38補碼運算過程
30--38的補碼算法。本題是一道兩位數與兩位數的減法運算,被減數不夠減去減數,給被減數30補一個數8,得到38。那必須給減數也補一個數8,才能使式子成立。即(38+8)。計算方法如下,
30--38=30+8--(38+8)=38--38--8
=0--8=--8。
補碼的基本運算
假設字長8位x=57d=00111001b[x]補=00111001b.-y=-20d=-10100b[-y]原=10010100b[-y]反=11101011b[-y]補=11101100b.[x]補=00111001b[-y]補=11101100b(+------------------------------------------[x-y]補=00100101b符號位進位自然丟失Cs⊕Cp=1⊕1=0,無溢出(Cs是符號位的進位,Cp是最高數值位的進位,⊕表示異或).x-y=00100101b=37d
補碼如何運算
1.補碼的加法運算:將兩個補碼相加時,先將它們的數值部分按照普通的加法規則相加,然后再將其結果對補碼表示的范圍進行取模,得到最終的結果。原因是補碼表示的范圍是有限的,超出這個范圍的部分必須被舍去。
具體步驟如下:
①將兩個補碼按位對應相加,不進位。
例如:0110(+6)+0011(+3)=1001(-7)
②對上一步得到的結果進行進位。
例如:1001+0010=1011(-5)
③檢查最后一位進位是否有影響,若有,則舍去最高位。
例如:1011-1111=0100(+4),去掉最高位1,得到100(-4)
2.補碼的減法運算:將被減數和減數轉換成補碼形式,然后將它們相加即可得到差值。原因是在補碼的表示下,減法實際上就是加上對應數的補碼。
具體步驟如下:
①將被減數和減數轉換為補碼形式。
例如:8(00001000)-3(00000011)=8(00001000)+(-3)(11111101,補碼)
②將上面兩個數相加。
例如:00001000+11111101=11111011(-5)
③檢查結果是否超出了補碼表示的范圍,若有,則需進行取模操作。
例如:11111011-10000=01111011(+3),去掉最高位1,得到1111011(-5)