对于补码的个人理解

首先我们需要引入一个概念,就是模。
什么是模?我们姑且认为就是一个数字。
什么样的数字呢?如果是十进制的计算,12-23,那么模就是100。二位数嘛,就是100。如果是三位数呢?那就是1000。
四位数计算是10000 。

……
依次类推,就是这个意思。对于二进制也是这样的,两个三位二进制数相减,模就是1000。四位二进制数字,模就是10000。 模其实就是减数的“溢出”量,也就是减数是几位,模就是比它多一位。
为什么引入这个概念呢?为的就是引出补码。

补码到底是什么?简单来说,当然是数字。非要赋予它一个名字,那肯定是为了方便叫它。补码其实就是“补”嘛,就是模减去减数,“补”齐减数到模的距离。

为什么要有补码?就是计算机底层只能计算加法(这方面的原因是复杂的,与计算机的组成原理有关,我只能按我的理解来表述,我肯定是不准确的),无法计算减法。那么引入补码就是为了让计算机能用加法的方式计算减法

举例子理解补码怎么来的。

25-32 模是100
= 25-32+模-模
=-模+(25+模-32)

补码=模-32
用二进制来看
模是10000 0000
(还有一个定义,正数的补码是本身,负数的补码不是它本身。这个好理解,正数嘛,本来就正,没必要再算。)

32= 0010 0000
补码 =10000 0000- 0010 0000=1110 0000 (可以先化为十进制再计算)
这里的1110 0000不是正数,而是负数。因为符号位的概念是这样定义的,先这样想。

继续计算
原式=-模+(25+补码)
=-模+(0001 1001+1110 0000)
=-模+ 1111 1001
=1111 1001 – 10000 0000
当然直接减不成,可以大减小再取相反数。
原式= -(10000 0000 – 1111 1001)
=- 0000 0111
=1000 0111
不是不能减的吗?是啊,不能减。我是写出来可以直观感受下它怎么来的,具体计算机计算的时候应该是用我们记得那个,“取反加一”就可以得出结果了。因为这样算下来和我们人脑用减法是一致的。

有没有觉得很神奇?其实就是个简化的过程而已,二进制看似是很简单,其实其中的奥秘远远不止它所表现出来的那样。除去符号位,取反加一,即可获得您的补码。补码除去符号位,再一次取反加一即可获得您的原码。这其实就是我们计算过程的一个简便,能够让你快速地获得你想要的数字。符号位的定义,计算下来就是这么巧妙,根本不用多想。“符号位不变,其他的取反加一即可。”符号位在里面也是可以一起计算的, 二进制和十进制就这样融合了。

其实原码和反码都是为了加而加的概念,我们可以不用知道原码、反码,照样可以求出补码。当然了,这三个很容易搞混,我们只需要弄清补码即可。至于反码和原码,先不用管,管它当然是因为考试,我们理解概念的时候先不予考虑。等理顺了补码,再记一下就OK。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值