【数字IC】二进制中“减一取反”和“取反加一”等价

一、问题的由来
对一个负数补码“取反加一”,等于求出其绝对值,然后再对这个绝对值“减一取反”即可算出原来的负数补码(这就是个逆向的过程,无可非议)。那么如果对这个绝对值采用“取反加一”的操作是不是也可以恢复成原来的负数补码呢?答案是肯定的,具体原因如下:

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

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

二、举例说明

为什么等价呢?

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

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

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

因此,二进制里,"减一取反"和"取反加一"等价,补码减一取反或者取反加一的值都一样,都能求出原码。所以在实际应用中对一个负数补码通过“取反加一”的操作算出绝对值之后,再次通过“取反加一”的操作也是可以算出原来的负数补码的,其效果和“减一取反”是一样的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值