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自动丢失
相同符号位的反码相加,如果发生溢出,只能增加补码的位数