#define lowbit(x) ((x)&(-x))
也可以寫成如下形式:
int Lowbit(x) {
return x&(-x);
}
例如:
1> x = 1:
十進制轉二進制(設位數為8):
1 => 0000 0001
-1=> 1111 1111(此處為1的補碼)
1&(-1)的二進制位運算為(同1異0):
2> x = 6:
十進制轉二進制(設位數為8):
6 => 0000 0110
-6=> 1111 1010(此處為6的補碼)
6&(-6)的二進制位運算為(同1異0):
所以6&(-6)=2
總結:
求出2^p(其中p: x 的二進制表示數中, 右向左數第一個1的位置),
如6的二進制表示為110,向左數第零個為0,第一個為1,則p=1,
故Lowbit(6) = 2^1 = 2。
或直接理解為:二進制按位與運算,返回不大於x的2的最大次方因子
開始於:2016-03-18、16:37:32