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...