I'm trying to understand what is this condition mean.
Does it mean after shifting the value it will be equal to 1?
I mean does it mean --> if (c >> a is 1)
Note: c >> a & 1
same as (c >> a) & 1
.
CodePudding user response:
Bitwise AND operate on bits, so the possibilities are :
1101 & 0001 => 0001
0001 & 0001 => 0001
1010 & 0001 => 0000
0000 & 0001 => 0000
Now, on C, anything that's not a zero is treated as true
, so the statement means "if after shifting the least significant bit is 1", or perhaps "if after shifting the value is odd" if you're dealing with odd-even operation.
CodePudding user response:
It executes the following statement or block if bit a of value c is true.
a 1 a a-1 1 0
... -- --- --- --- -- ... - --- ---
| z | y | x | | q | p |
... -- --- --- --- -- ... - --- ---
... - --- ---
>> a | z | y |
... - --- ---
... - --- ---
&& 1 | 0 | y |
... - --- ---
CodePudding user response:
>>
has higher operator precedence than &
.
So c >> a & 1
means "shift the value c
by a
bits to the right, then check if the lowest bit of the shifted value is set. To single out certain bit values like this is known as bit masking and 1
in this case is the mask.