位運算的技巧

2021-10-03 12:06:13 字數 928 閱讀 9491

1. 找到乙個整數的二進位制中最後一位1的位置:

int split = a&(a-1)^a; 

int split = a&~(a-1);

注意split不是位置。 

2. 將乙個數的最後一位1變為0

n=n&(n-1)
3. 乙個整數的二進位制中1的個數

int res = 0;

while (n!=0)

return res;

4.  判斷乙個數是不是2的冪次;

兩個條件:大於0;且二進位制中只有乙個1(那麼將最後乙個1去掉之後不就是0了嗎)

5. 判斷最後一位數是不是1

n & 1 == 1
6.關於負數的右移左移:

1.負數的右移:需要保持數為負數,所以操作是對負數的二進位制位左邊補1。如果一直右移,最終會變成-1,即(-1)>>1是-1。

2.負數的左移:和整數左移一樣,在負數的二進位制位右邊補0,乙個數在左移的過程中會有正有負的情況,

所以切記負數左移不會特殊處理符號位。如果一直左移,最終會變成0。

7.  位運算求和

兩個數異或:相當於每一位相加,而不考慮進製;

兩個數相與,並左移一位:相當於求得進製;

public int add(int num1,int num2) 

return num1;

}

位運算的技巧

檢測乙個無符號數是不為2 n 1 為冪 x x 1 將最右側0位改為1位 x x 1 二進位制補碼運算公式 x x 1 x 1 x x 1 x x 1 x x 1 x y x y 1 x y x y x y x y 1 x y x y x y x y x y x y x y y x y x y x ...

位運算的技巧

在討論位運算之前有必要補充一下計算機底層使用的編碼表示,計算機內部儲存 計算的任何資訊都是由二進位制 0和1 表示,而二進位制有三種不同的表示形式 原碼 反碼和補碼。計算機內部使用補碼來表示。原碼,就是其二進位制表示 注意,有一位符號位 反碼,正數的反碼就是原碼,負數的反碼是符號位不變,其餘位取反 ...

位運算的技巧

2019 09 03 10 29 36 x x 1 相當於消除了 x 從右向左數遇到的第乙個 1。應用 一 用 o 1 時間檢測整數 n 是否是 2 的冪次。若 n 是 2 的冪次,則 n n 1 0。應用 二 計算整數二進位制中包含 1 的個數。public int countones int n...