原码:
原码符号位就是正为0,负为1
例子:
34=0010 0010
-29=1001 1101
-19=1001 0011
反码:
正数的反码等于原码,
负数:符号位不变,其余位取反,
-33=1010 0001(原)
1101 1110(反)
-37=1010 0100(原)
1101 1011(反)
-49=1011 0001(原)
1100 1110(反)
补码:
计算机中数据以补码的形式,同样以补码的形式参与运算
正数:原码=反码=补码
负数:首先求得的反码,在反码的基础上加一,加在最低位上。
-34=1010 0010 补码:1101 1110
-29=1001 1101 补码:1110 0011
-47=1010 1111 补码:1101 1111
为什么需要反码和补码?
反码:计算器运算器只有加法器,没有减法器,
但是反码有缺陷,正负相加0不是唯一的
补码:为了解决反码正负相加不唯一的情况,使用高位溢出解决;
例题:
补码:45-19=26
0010 1101
+1110 1101
0001 1010
53-27=26
0011 0101
+1110 0101
0001 1010
65-34=31
0100 0001
+1101 1110
0001 1111
-34--27=-61
1101 1110
+ 1110 0101
---------------------------
1100 0011 因为他的结果为负,所以要取他的补码方能得到正确结果: 1011 1101
正数不需要转,负数需要将负数的补码当做原码,求补码,(补码的补码)
例题:
1111 1111 1000 0000【-128补码】求原码
1000 0000 1000 0000
1001 0011 (原) 1110 1101(补)