#define LOWBIT (x) ((x) & (-X))
Can also be written as follows:
int Lowbit (x) {
Return x& (-X);
}
For example:
1> x = 1:
Decimal to binary (the number of bits is 8):
1 = 0000 0001
-1=> 1111 1111(here is the complement of 1)
The bits operation for 1& (-1) is (same as 1 XOR 0):
So 1& (-1) =1
2> x = 6:
Decimal to binary (the number of bits is 8):
6 = 0000 0110
-6=> 1111 1010(here is the complement of 6)
The bits operation for 6& (-6) is (same as 1 XOR 0):
So 6& (-6) =2
Summarize:
Find the 2^p (where the binary representation of p:x, the right-to-left number is the first 1 position),
If the binary representation of 6 is 110, the left number 0th is 0, the first is 1, then p=1,
So Lowbit (6) = 2^1 = 2.
Or directly understood as: Binary bitwise AND operation, returns the maximum quadratic factor of 2 less than X
Start in: 2016-03-18, 16:37:32
#define LOWBIT (x) (x) & (-X) principle detailed