补码,原码,反码的意义

补码,原码,反码

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

补码

我们用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得到的结果。而正数的补码还是本身。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值