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