【志銀】#define lowbit(x) ((x)&(-x))原理詳解

分析下列語句:

#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

相關文章
相關標籤/搜索