[计算机基础]原码、反码、补码是什么?

2022/1/17 6:05:57

本文主要是介绍[计算机基础]原码、反码、补码是什么?,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

机器数

现在的计算机(冯·诺依曼体系结构)采用的是二进制,在计算机内表示一串二进制数 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\)。



这篇关于[计算机基础]原码、反码、补码是什么?的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程