[计算机基础]原码、反码、补码是什么?
作者:互联网
机器数
现在的计算机(冯·诺依曼体系结构)采用的是二进制,在计算机内表示一串二进制数 01101001,称之为机器数。计算机无法识别人类定义的加、减、乘、除、正、负等数学符号,对于如何表示正、负的二进制数字,规定二进制数中,最高位用“0”代表正,用“1”代表负,其余部分的数字为真值。比如,01101001 二进制数的最高位为 0,所以,它是一个负数,真值部分为 1101001。
原码
原码就是符号位加上真值的绝对值。比如,01101001 这样的二进制数最高位是符号位,其余部分是真值。简单来说,原码就是机器数。
在十进制中\(6 - 5 = 1\)可以写成\(5 + (-5) = 0\),对于二进制也同样适用。将十进制的 5 和 -5 分别转换成机器数(原码),5 的机器数是 00000101;-5 的机器数是 10000101。最高位 0 代表正,1 代表负,因此,\(00000101+10000101=10001010\)的最终结果转换为十进制就是\(-10\)。
为什么结果是 -10 呢?很显然,这并不是正确的答案。然而,反码能够解决原码做减法出现的问题,这也是为什么计算机内部不使用原码表示一个数。
反码
对于正数来说,反码与原码一致。对于负数来说,反码就是原码的最高位不动,真值一一取反。
00000101 的反码依旧是 00000101;10000101 的反码是 11111010,用反码代替上面原码的减法:
最后反码相减的结果是 11111111,由于最高位是1,即负数,所以反码要转换成原码,真正的结果是 10000000,转换为十进制数就是“-0”。
在十进制中,10000000 和 00000000 都代表 0,但是前者是带有符号“正”的0,后者是带有符号“负”的0。所以,为了区别开来,补码就出现了。
补码
对于正数来说,补码与原码一致。对于负数来说,补码就是该数的反码加1。
10000101 的反码是 11111010,补码是\(11111010 + 1 = 11111011\),用补码代替上面反码的减法:
由于最后的结果是十位数,所以直接舍去最高位 1。剩下部分的最高位为 0,正数的反码和原码以及补码都是一致的,所以,最终结果是 0。符合\(5 + (-5) = 0\)。
标签:真值,反码,二进制,补码,十进制,原码 来源: https://www.cnblogs.com/shiramashiro/p/15811944.html