位操作:(x-1)将从x的最右侧设置位切换所有位

时间:2018-06-15 05:19:50

标签: bit-manipulation bit

为什么这个属性适用?

  

说右边的第k位是数字'x'中的第一个设置位。   (x-1)将从右侧切换到第k位。

我可以通过编写数字的位序列来验证此属性,但我不明白为什么这个属性是真的?任何人都可以用一个简单的证据或直觉来帮助我,为什么这有效?

2 个答案:

答案 0 :(得分:2)

如果你这样做(x-1),其中x是基数10整数,那么右边的所有零(如果有的话)将成为9。

9324930000000 - 1 = 9324929999999

答案 1 :(得分:1)

让我们做一个手减法

  xxx100...00
- xxx000...01
_____________
  xxx011...11

x代表我们不关心的部分

从右边开始10 - 1 = 1,从下一栏借用1

然后下一个是0 - 0,减去借位,这也导致0 - 1 = 1借用1.这个序列一直持续到减数中的位为1,现在我们有1 - 0 - borrow = 1 - 1 = 0 < / p>

结果,直到最右边设置位的所有位都将被反转