两数之差的补码等于被减数的补码与减数相反数的补码。_原码、补码、反码

机器中整数的原码、补码,补码运算

对于二位十进数的减法,我们可以把它变成加法运算,例如计算:84-57,我们可以先求57对99的补数99-57=42,由于这里的减法不会涉及到借位,实际上是多次做一位数的减法,所以,并没有做(多位数)减法运算,84+42+1=127,去掉最高位2,即得结果27。

原理:84-57=84+99-57+1-100=84+42+1-100=127-100=27

0b300ebf-4c13-eb11-8da9-e4434bdf6706.png

对于8位二进制数,同理:00100100-00011010 = 00100100+100000000-011010-100000000 = 00100100+11111111-011010+1-10000000 = 00100100+11100101+1-100000000 =00100100+11100110-100000000 =00001010

如果看到上面的二进制算式不舒服,看这舒服点 36-26=36+256-26-256=36+255-26+1-256 ......,在二进制体系下,无论机器或是人,计算255-26,那是相当的容易,减去256,也是相当容易。

减数00011010对11111111的补数是11100101,加1得11100110(二进制中1的地位相当于10进制中的9),它是00011010对100000000的补数。意思是二进制的00011010补(加)上11100110后得到(等于)100000000

0c300ebf-4c13-eb11-8da9-e4434bdf6706.png

二进制式子对应的十进制即是:36-26=10

下面以4位二进制数为例,说明计算机中整数的原码、补码表示

0e300ebf-4c13-eb11-8da9-e4434bdf6706.png
4位2进制只有16个码点,能表示16个整数

非负数的补码:对于0~7的数,我们很容易知道它的4位二进制补码,即它的二进制表示。

负数的补码:对于(-1~-8)之间的负数,如何知道(求出)它的补码呢?以-4为例说明如何求出负数的补码二进制形式,先求它的相反数4对应的4位二进制表示:0100,然后把它的各位变反,得:1011,再加1(1011+1=1100)即得-4的补码:1100。

实际上,4位二进制中,-4的补码为:10000-0100=1+1111-0100=1+1011=1100。此变反加一原理也。

补码的实际值:对于4位二进制补码,如果最高位是0,那么它是非负数,容易知道它的真值;如果最高位是1,那么它是负数,变反加1,即得该补码所表示的数的相反数。例如补码1100的各位变反,再加1会得到0100(即4,显然它是-4的相反数)。

反码:一个二进制数的反码就是对二进制数的各位求反,这在计算机的硬件上很容易实现。

补码使计算机仅用做加法运算。

至此,你应该知道一个8位、16位、32位或n位编码(补码)的原理,表数范围。

c/c++32位整数int类型的表数范围是-2147483648~2147483647,还会怀疑吗?

计算机硬件内部,整数用补码表示,当两个数相加时,这两个数直接送入加法器相加;两数相减时,用反相器求减数的反码,把此反码和被减数送入加法器,并设置个位的初始进位为1,加运算的结果就是原两数相减的结果。

小丛:还不会浮点数转二进制?下次有人问你,直接把这篇文章扔给他

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值