天天看點

x&(-x) Lowbit(x)

剛學樹狀數組,看到這裡的時候懵了。經過詢問,發現,原來在程式運作時,資料用的都是補碼,于是解決了

int Lowbit(x)

{

  return x&(-x);

}

如:

x =1: 1 &-1(設位數為8)0000 0001 & 1111 1111 = 1

 x = 6:6 & -6   0000 0110

           &1111 1010 = 2

總結一下,其實就是:

求出2^p(其中p: x 的二進制表示數中, 右向左數第一個1的位置),如6的二進制表示為110,向左數第零個為0,第一個為1,則p=1,故Lowbit(6) = 2^1 = 2。