在对带符号数进行运算时,必然涉及数的符号问题,人们通常在一个数的前面用“+”表示正数,用“-”表示负数。而在数字系统中,符号和数值一样使用0和1来表示的,一般将数的最高位作为符号位,用0表示正,用1表示负,其格式为:
符号位 | 数值位 |
---|
把符号和数值一起编码表示的二进制数称为机器数或机器码,常用的机器码有原码,反码,补码三种。
一、原码
用原码表示带符号位二进制数时,符号位用0表示正,1表示负,数值位保持不变,原码表示法又称符号-数值表示法
整数原码和小数原码
二进制整数原码就是在其最高位添加0或1,用于表示正负,小数也是一样。
例1:$X_1=+1101,X_2=-1101,$则$X_1$和$X_2$的原码为:$[X_1]_原=01101,[X_2]_原=11101$.
根据定义:整数“0”的原码有两种形式,即00…0或10…0.
例2:$X_1=+0.1011,X_2=-0.1011$,则$X_1$和$X_2$的原码为:$[X_1]_原=0.1011,[X_2]_原=1.1011$
根据定义:小数“0”的原码也有两种形式,即0.0…0或1.0…0.
二、反码
正数反码的数值位和真值相同;负数反码的数值位是真值按位取反
例1:$X_1=+0.1011,X_2=-0.1011$,则$X_1$和$X_2$的反码为:$[X_1]_反=0.1011,[X_2]_反=1.0100$
根据定义:小数“0”的反码有两种表示形式,即0.0…0或1.0…0.
根据定义:整数“0”的反码也有两种表示形式,即00…0或10…0.
三、补码
用补码表示带符号的二进制数时,符号位与原码、反码相同。正数补码的数值位与真值相同,负数补码的数值位为反码在最低为加1
例:$X_1=-0.1011,X_2=-1010$,则$X_1$和$X_2$的补码为:$[X_1]_补 = 1.0101,[X_2]_补 = 10110$
根据定义:小数“0”的补码只有一种表示形式,即0.0…0.
根据定义:整数“0”的补码也只有一种表示形式,即00…0.
采用补码进行加、减运算时,其加、减运算均可通过加法是按,运算规则如下:
$[X_1+X_2]_补=[X_1]_补+[X_2]_补$
$[X_1-X_2]_补=[X_1]_补+[-X_2]_补$
运算时,符号位和数值位一样参加运算,若符号位有进位产生,则应该将进位去掉才能得到正确结果。
例:若$X_1=-1001,X_2=+0011$,则采用补码求$X_1-X_2$的结果为:$[X_1-X_2]_补=[X_1]_补+[-X_2]_补=10111+11101=10100$,由于结果的符号位为1,表示是负数,故$X_1-X_2=-1100$
四、总结
(1)若$X>0$,则$[X]_原=[X]_反=[X]_补$.
(2)$[X+Y]_补 \xrightarrow[求反,最低位+1]{} X+Y$.