Why does (x-1) toggle all the bits from the rightmost set bit of x?

后端 未结 2 1506
攒了一身酷
攒了一身酷 2021-01-27 15:18

Why does this property hold true?

say the kth bit from right side is the first set bit in number \'x\'. (x-1) will toggle every bit upto kth bit from r

相关标签:
2条回答
  • 2021-01-27 15:37

    It's the same reason if you do (x-1) where x is a base 10 integers all the zeros (if any) on the right will become nines.

    9324930000000 - 1 = 9324929999999
    
    0 讨论(0)
  • 2021-01-27 15:45

    Let's do a hand subtraction

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

    x represents bits that we don't care

    Starting from the right, 10 - 1 = 1, borrowing 1 from the next column

    Then the next one is 0 - 0, minus the borrow, which also results in 0 - 1 = 1 borrows 1. This sequence continues until the bit in subtrahend is 1, now we have 1 - 0 - borrow = 1 - 1 = 0

    As the result, all the bits up to the rightmost set bit will be inverted

    0 讨论(0)
提交回复
热议问题