计算机的存储器中只能存储二进制数0、1,无法存储正负号。所以我们将数据用原码、反码、补码系统表示好存储到计算机中,有利于运算。
设:x=+0101,y=-1000。
一、原码
原码系统就是用0、1表示真值的符号,0表示正号,1表示负号。如:[x]原=00101,[y]原=11000。
注意:0有两种表示法[+0]原=00000,[-0]原=10000。
原码表示简单易懂,真值变换也方便,在进行乘除运算时也方便。符号位作异或运算,数据进行乘除运算。但加减运算比较复杂,如两数相加,如果同号,则数据相加,符号位不变。如果异号,则要判断两个数的大小,用大数减小数,结果符号与大数符号相同。在计算机中乘除运算都是利用加减运算完成的,所以原码系统使用不是很方便。
二、反码
反码系统也是用0、1表示真值的符号。真值为真与原码相同,为负则将数据每位求反,如:[x]反=00101,[y]反=10111。
注意:
1、0有两种表示法[+0]反=00000,[-0]反=11111。
2、两个数反码的和等于两数和的反码。当符号位进位时须循环进位。循环进位即将符号位的进位加到和的最低位上。
例1:x=+1001,y=-1011,计算x+y。
[x]反=01001,[y]反=10100,[x]反+[y]反=11101
x+y真值=-0010,[x+y]反=11101
例2:x=+1001,y=-0101,计算x+y。
[x]反=01001,[y]反=11010,[x]反+[y]反=100011,将首位的1取出与00011相加得到00100
x+y真值=+0100,[x+y]反=00100。
反码加减运算不必判断两数大小,还要有个循环进位。
三、补码
先介绍模和同余概念。对于两个整数a、b,同除一个数M,所得余数相等,则称a、b对模数M同余。记为a=b(Mod M)。
例如模为10,8+(-2)=8+8=16(Mod 10)=6,其中8就是(-2)的补码(模为10)。
注意:
1、0表示法惟一。
2、两个数补码的和等于两数和的补码。
3、负数的补码就是符号位不变,数据每位取反再加1。
例1:x=+1001,y=-1011,计算x+y。
[x]补=01001,[y]补=10101,[x]补+[y]补=11110
x+y真值=-0010,[x+y]补=11110。
例2:x=+1001,y=-0101,计算x+y模为2的五次方=100000。
[x]补=01001,[y]补=11011,[x]补+[y]补=100100=00100
x+y真值=+0100,[x+y]补=00100。