1. 程式人生 > >【志銀】#define lowbit(x) ((x)&(-x))原理詳解

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

分析下列語句

#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)

img

所以1&(-1)=1

例2:x = 6

十進位制轉二進位制(設位數為8)

6 => 0000 0110

-6=> 1111 1010(此處為6的補碼)

6&(-6)的二進位制位運算為(二個二進位都為1

):

img

所以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