计算机存储数值为什么使用补码?
什么是原码,反码,补码?
原码,反码,补码是计算机对数字的二进制表示方法。
原码:将最高位作为符号位(0为正,1为负),其余位数用来表示此数字绝对值的大小。
反码:如果是正数,与原码相同;如果是负数,符号位不变,其余位取反。
补码:如果是正数,与原码相同;如果是负数,则将数字的反码加上1。
例如:
数值 | 原码 | 反码 | 补码 |
---|---|---|---|
6 | 0000 0110 | 0000 0110 | 0000 0110 |
-6 | 1000 0110 | 1111 1001 | 1111 1010 |
使用补码的意义
补码的意义体现在两个方面
-
统一了0和-0的编码
以byte为例:
十进制 原码 反码 补码 0 0000 0000 0000 0000 0000 0000 -0 1000 0000 1111 1111 (1)0000 0000 从数值上来看,0和-0大小是一样的,但是它们原码和反码的表示方式却是不一样的,因此原码和反码是无法统一0和-0的编码。再看-0的补码是(1)0000 0000,需要九位才能表示,最高位1溢出,因此-0的补码也是0000 0000,这样便统一了0和-0的编码。
-
符号位和其它位可以一同处理。
以9-1为例:
十进制 原码 反码 补码 9 0000 1001 0000 1001 0000 1001 -1 1000 0001 1111 1110 1111 1111 8 0000 1000 0000 1000 0000 1000 补:计算机的加减法运算都是通过加法实现的。
通过原码计算得到的结果:1000 1010,十进制是-10,结果不正确。
通过反码计算得到的结果:0000 0111,十进制是7,结果不正确。
通过补码计算得到的结果:0000 1000,十进制是8,结果正确。
由此可以看出如果使用补码进行计算,计算机可以将符号位和其它位一同处理。