1.5 帶符號數表示法
原碼、反碼、補碼帶上符號位均為8位
-
原碼表示法
原碼(True Form)表示法是在二進制數值之前加一個符號位。通常用0表示正數,用1表示負數,后面的數位表示數的大小。
例:分別寫出 (+11)10 和 (-11)10 的8位二進制原碼。 -
反碼表示法
反碼(One's Complement)表示法的符號位表示與原碼相同,數值位表示的規則如下:對於正數,其數值位與原碼表示法中相同;對於負數,除符號位以外,其余各位取反就得到了數值位。
例:分別寫出 (+11)10 和 (-11)10 的8位二進制反碼。(+11)10 = (+1011)2 = (+0001011)2 = (00001011)反碼
(- 11)10 = (- 1011)2 = (-0001011)2 = (11110100)反碼 -
補碼表示法
計算機中通常采用的帶符號數表示法是補碼(Complement)表示法,其規則:對於正數,補碼與原碼相同;對於負數,符號位仍為1,二進制數值位要按位取反,然后末位加1。也就是在反碼的基礎上加1。
例:分別寫出 (+11)10 和 (-11)10 的8位二進制補碼。
(+11)10 = (+1011)2 = (+0001011)2 = (00001011)反碼 = (00001011)補碼
(- 11)10 = (- 1011)2 = (-0001011)2 = (11110100)反碼 = (11110101)補碼需要指出,當帶符號數為純小數時,原碼或補碼的符號位在小數點的前面,原來小數點前面的0不再表示出來。
例:分別計算 (0.01101)2 和 (- 0.01101)2 的8位二進制原碼、反碼和補碼。
(0.01101)2 = (0.0110100)原碼 = (0.0110100)反碼 = (0.0110100)補碼
(-0.01101)2 = (1.0110100)原碼 = (1.1001011)反碼 = (1.1001100)補碼 -
帶符號數的補碼運算
利用補碼,可以方便地進行帶符號數的加、減運算。運算過程中需要注意的是,同號相加或異號相減時,有可能發生溢出(Overflow)。溢出是指運算結果超出了原制定位數所能表示的帶符號數范圍。發生溢出時需要增加二進制補碼的位數。
采用補碼加法運算時,運算結果仍為補碼。對於字長為8位的運算器,只保留8位運算結果,最高位向上的進位“1”自動丟失。當結果的符號位為0時,結果為正,否則,結果為負。

不同符號的反碼相加,如果發生溢出,最高位上的進位1自動丟失
相同符號位的反碼相加,如果發生溢出,只能增加補碼的位數