#define lowbit(x) ((x)&(-x)) 可寫成下列形式:int Lowbit(x) { return x&(-x); } 作者: 志銀(ZainChen); 更新日期: 2019.01.07 ...
分析下列語句
#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):
所以1&(-1)=1
例2:x = 6
十進位轉二進位(設位數為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-18、16:37:32