原码、反码、补码及其运算
计算机中的数据都是以补码的形式存放和计算的,所以要弄明白到底什么是补码?
一、补码举例说明
假设现在是5点钟,但表却显示10点钟,需要手动拨回5点钟,有两种方法: (1)逆时针拨5个格,即10 - 5 = 5; (2)顺时针拨7个格,即10 + 7 - 12 = 5; 如下图所示,由于表盘一圈只有12个格,超过12以后的“进位”自动舍弃,于是就只剩余数5了。 从上例可知,10 - 5的减法运算可以用10 + 7的加法运算代替,因为5 + 7正好等于进位数12,称7为5的补码。 在舍弃进位的条件下,减去一个数的运算可以用加上它的补码来等效计算。 再例,由下图可见4位二进制数运算:1011 - 0111 = 0100,在舍弃进位条件下,可以用1011 + 1001 = 10100(舍弃进位,即最高位) = 0100代替,结果与减法运算相同,因为0111(7)+ 1001(9) = 10000(16),又因为4位二进制数的进位基数是16(10000),所以9(1001)恰好是7(0111)的补码。 因此,利用补码可以将减去一个数的运算转化为加上这个数的补码来计算,即减法变成了加法。
二、原码、反码、补码的运算
1、正数的原码 = 反码 = 补码; 2、负数的反码等于它的原码符号位不变,其它位按位取反; 负数的补码等于它的反码加1; 负数的补码的补码即为它的原码 或 补码减1为反码,再符号位不变其他位按位取反即得原码。
【例1】用二进制数计算10 - 13: 10的原码为 :0 1010; 10的反码为: 0 1010; 10的补码为: 0 1010; -13的原码为:1 1101; -13的反码为:1 0010; -13的补码为:1 0011; 那么10 - 13 = 01010 + 10011 = 11101(补码) 其反码为:11100; 其原码为:10011,十进制数为-3。
【例2】用二进制数计算-10-13,由于|-10| + |-13| = 23,因此需要用5位有效二进制数来表示: -10的原码为:1 01010; -10的反码为:1 10101; -10的补码为:1 10110; -13的原码为:1 01101; -13的反码为:1 10010; -13的补码为:1 10011; 那么-10 -13 = 110110 + 110011 = 1 101001,舍弃进位即为101001(补码) 其反码为:101000; 其原码为:110111,十进制数为-23。