补码,原码,反码的意义

来源:互联网 发布:拍丑照的软件是什么 编辑:程序博客网 时间:2024/05/06 23:28

补码,原码,反码

计算机组成原理中,有补码,原码,反码的概念,但是一直搞不清楚为什么,只是记忆公式,不明白是怎么来的,现在写下来要如何理解各种码之间的关系,以及怎么来的。

补码

我们用C语言来举例。C语言中short是2个字节。则考虑如下语句:

short a = 5;

其中a在内存中的二进制表示为:

0000 0000 0000 0101

在计算机中,我们想要把加法和减法都统一成一种相同的运算规则,不用再对加法和减法进行区分,所以就要引入补码。

考虑 5+(-5)这种情况。当然,实际上就是5-5,但我们想要都统一成一种运算,所以就要看作是5+(-5)。当然,正确的结果应该是0才对,不管你怎么看待减法运算,结果肯定不能变。
-5的二进制表示为(最高位为符号位):

1000 0000 0000 0101

如果我们不做任何改变,直接把-5和5用二进制来相加,结果是:

1000 0000 0000 1010

也就是十进制里的-10,很显然,我们需要的是0,因此这种计算规则是错误的。
那么如何让结果是0呢?很简单:观察5的二进制表达:

0000 0000 0000 0101

我们对5进行按位取反,得到:

1111 1111 1111 1010

然后和5相加,很显然,结果是:

1111 1111 1111 1111

此时,距离0只有一步之遥,只需要在结果上加1就行了,因为short只有16位,所以进位就会益处,不用管了,因此a的8位全部是0,我们想要的0也就的出来了。

加1后得:

0000 0000 0000 0000

因为 直接什么都不变,用5+(-5)的二进制表示去相加,结果等于10,所以,我们就把-5用-5的补码来表示,这样相加就是0了,得到了正确的结果。因此,计算-5的补码,就是把5(注意是5不是-5)的二进制表示,按位取反(包括符号位),然后加1得到的结果。而正数的补码还是本身。

0 0