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:
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 1
s at the left are discarded and 0
s 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.