Need help understanding “getbits()” method in Chapter 2 of K&R C

后端 未结 6 1074
暗喜
暗喜 2020-12-04 16:03

In chapter 2, the section on bitwise operators (section 2.9), I\'m having trouble understanding how one of the sample methods works.

Here\'s the method provided:

6条回答
  •  独厮守ぢ
    2020-12-04 16:31

    Let's use 16 bits for our example. In that case, ~0 is equal to

    1111111111111111
    

    When we left-shift this n bits (3 in your case), we get:

    1111111111111000
    

    because the 1s at the left are discarded and 0s are fed in at the right. Then re-complementing it gives:

    0000000000000111
    

    so it's just a clever way to get n 1-bits in the least significant part of the number.

    The "x bit" you describe has shifted the given number (f994 = 1111 1001 1001 0100) right far enough so that the least significant 3 bits are the ones you want. In this example, the input bits you're requesting are there, all other input bits are marked . since they're not important to the final result:

    ff94             ...........101..  # original number
    >> p+1-n     [2] .............101  # shift desired bits to right
    & ~(~0 << n) [7] 0000000000000101  # clear all the other (left) bits
    

    As you can see, you now have the relevant bits, in the rightmost bit positions.

提交回复
热议问题