如何快速求原码、反码、补码

相信很多小伙伴在学习计算机相关课程的时候一定遇到了如何求反码、补码原码的问题,其实这原本是一个简单的问题。而且很多课程都只是开始介绍了原码反码补码如何去求,以及他们的作用是什么,后面就几乎再也用不到了。但正是因为后面用不到了,导致我们很多时候学过又会遗忘,不相信的小伙伴,如果最近你没有复习相关知识,那么你能马上说出原码补码反码以及移码怎么求吗?并且他的作用是什么呢?

哈哈,肯定很多小伙伴说不出来把!那么为什么这么简单我们还会出现遗忘呢?就像1+1=2,他很简单,而且我们一辈子也不可能忘记,所以到底是什么导致了我们遗忘掉反码补码原码呢?

其实原因很简单,因为书上会告诉我们,“正数的反码补码原码相同,而负数的反码是符号位不动,数值位取反,补码是在反码的基础上+1得到。“

这句话其实一点问题也没有,但是正是因为这句话,导致了我们以一种错误的方式去理解这三个码,导致时间一久我们其实遗忘的是这句话,而不是因为这三个码很难。

好啦,那么接下来,我就来说说大家该如何理解这三个码以达到这辈子都不可能忘记的程度。

首先我们以4位2进制bit举例。

这是2进制比特和原码反码补码真值的对应关系。

对于原码我们不用多说,因为它就是符号位为0表示正数,符号位为1表示负数,这就是一种规定,我们其实可以去接受一些认为规定的东西,因为我们本身就是人啊,我们的语言,我们生活中的很多东西都是认为规定的,包括物理和数学中也有很多认为规定的东西,只不过它们有自己存在的道理,这里原码这么表示也是有它的道理的,因为计算机中只有2进制位,所以我们为了区别正负数我们可以采用这种方式来区别正数和负数,虽然我们可以把所以的负数变成减去一个正数的方式,但是减法器的硬件电路实在是太复杂了,如果想知道到底有多复杂的小伙伴可以先去看看alu的硬件电路有多么复杂就知道了,而且减法器会更加复杂。

        我们先接受上面表示原码的方式,接下来我们聊聊反码,反码是符号位不动,数值位取反,那么取反后的数和原来的数有什么关系呢?在十进制里面,我们把99取反,其实是它的相反数,那么在二进制里面也有类似的规律吗?以4位二进制位举例,我们把-3取反得到得数得真值是3吗?

-3原码:1011,-3反码:1100.而这个无符号数是12.

可以反向并不是这样,那么我们来观察一下上面给出得图 2进制比特和原码反码补码真值的对应关系。

可以发现正数得反码和原码一样,我们不去讨论,而负数,-0得原码对应得是-7得反码,而-7得反码对应得是-0得补码,虽然我只给了2个数据,但是中间得数据我们可以脑补,-1得原码对应得时候-6的补码,-2得原码对应得时候-5的补码,-3得原码对应得时候-4的补码.....可以发现同样一个二进制数,它的无符号数的绝对值越大取反后对应的真值越小。

-1的原码:1001,-1的反码:1110.

我们发现把-1取反后,去掉反码的符号位和去掉原码的符号位相加后结果位111,这个数的二进制表示刚好为7。对于-2,-3,-4。。。。都有这种特点。并且越大的数取反对应的是绝对值较小的数的原码。

        至此,我们就得出结论,一个负数取反后,不是求相反数,而且有这样的规律,请看图。

 

 也就是说我们把一个数取反后他其实是在能表示的数的范围内绝对值互余的数,绝对值越大的数去反码对应的2进制位的无符号数就越小,反之亦然。以4位二进制数来看,1位符号位占了,所以3个二进制位能表示的数的绝对值就是0到7。我们这里只讨论负数,因为正数的反码还是本身,所以但我们要求-2的反码是,其实就是要求5的原码。因为2+5=7。

        这样我们便搞清楚了一个数取反后的真面目。

先写到这里。下次我将会告诉如何快速的求补码,和快速求移码。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值