位運算技巧

2021-07-05 18:49:58 字數 406 閱讀 5879

1.lowbit(x)

實現:

int lowbit(int x)

這個函式用來求數中二進位制位中最低位的1(完整求法:log2(lowbit(x))),需要注意的是,答案的範圍是0~30,因為31位是符號位,求出來的值為負數,原因如下:

設x = 0x8000 0000,那麼設res = lowbit(x) = 0x8000 0000,這樣如果res為int, 那麼res為一負數,log2(res)的操作即為非法的,通過將res宣告為unsigned int即可解決該問題。

2. 清除最低位的1

n &= (n -1) ; // 清除最低位的1
因為n最右側連續的0,在n-1中為連續的1,n最右側的1,在n-1中為最右側的0。

位運算技巧

數字和1相與 判斷奇偶 x 1 1 奇數 x 1 0 偶數 不用其他空間交換兩值 a a b b a b a a b 或a a b b a b a a b a 0 a a a 0 不用其他空間找陣列中唯一成對的那個數 int b 0 for int i 1 i 10 i int a 10 for i...

位運算技巧

1.或 符號 比較兩個數的每一位,只要有乙個數在這一位上為1,所得的新數在這一位上就為1,否則為0。2.與符號 比較兩個數的每一位,只有兩數這一位同時為1時所得新數為1,否則為0。3.異或 符號 比較兩數的每一位,如果一樣所得新數這一位就是0,不一樣就是1。4.取反 符號 0變1,1變0。5.移位 ...

位運算技巧

1.n n 1 可以記住結論 n n 1 可以消除n的二進位制形式中的最後乙個1.leet191.位1的個數 public class solution return weight 本題就是利用n n 1 可以消除n的二進位制形式中的最後乙個1,當n為0的時候,說明原來n中的所有1都被消除了。這樣每...