为什么补码的补码就是原码?二进制里为什么减一取反和取反加一等价?

首先先理解这句话的意思,“(1)补码的(2)补码就是原码”,其中第一个标注的"补码",就是名词补码,而第二个标注的"补码",是个代称,含义就是取反加一,这句话完整的意思是一个数的补码,取反加一后就还原成原码了

一般来说,补码就是原码取反加一,还原成原码的时候应该先减去一再取反。其实在二进制里,"减一取反"和"取反加一"等价,所以我们可以这么做

为什么等价呢?

假设一个N位的二进制数,可表示的最大值是2^N - 1,例如八位二进制数,最大值是"11111111",就是2^8 - 1,另设一个数n,有一个数x,在这个N位的二进制数里,x = 2^N - 1 - n,即n + x = 2^N - 1,我们不妨称x为n的“补数”,那么对n取反,其实就是算出它对于当前N位数的最大二进制数的补数(因为一个位的数和自身取反的数相加必然是1),例如n是10110100(忽略符号位),取反后为01001011,此为x,而n+x=11111111,即当前N位数的最大二进制数,所以取反就是算补数。

那么对于数n,先取反求出补数,(2^N - 1 - n),再加一得: (2^N - n)

然后再先对n减一,得(n - 1), 再求补数:(2^N - 1 - (n - 1))= (2^N - n)

所以说二进制里,"减一取反"和"取反加一"等价,补码减一取反或者取反加一的值都一样,都能求出原码

 

  • 39
    点赞
  • 88
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值