计算机的基础运算中涉及的原码,反码,补码,移码。这么多码,到底什么关系?
为了将问题简化,我们只讨论整数,我们假设只取3位,这三位可以表示从 0 到 7 的数值。
你可以把这几个数字看成是一列符号,而没有具体的数值。可以看到,正整数的原码,反码,补码都是一样的。
对于负整数:
原码是将最高位取反, 所以 原码代表的数值 +它的实际数值=4, 比如 -2, 实际是由 110表示,十进制是6,-2+6=4
负整数数的反码则是将各个位取反,这个操作其实是 求它的对称数。0+7=1+6=2+5=3+4 =7, 所以,各位取反实际上是用7去减绝对值。7-3=4,所以用110表示-3这个数。
补码,其实就是因为反码多出了一个0,所以将上面图中反码负数的部分向右挪了1,所以负数的补码就是反码+1
移码比较特别。
移码,就是将补码的负数部分和正数部分整体换一个位置,这样的好处是可以保持从负数到正数的递增方向与实际二进制数的递增方向一致。
对于小数,可以用相似的思维去理解。