《每週一個算法題》-位運算

先理解與,或,異或

符號 描述 運算規則
& 兩個位都爲1,結果才爲1
l 兩個位都爲0,結果才爲0
^ 異或 兩個位相同爲0,相異爲1

算法中經常使用的位運算操做:算法

  • X & 1 ==1 or ==0 判斷奇偶性(X%2==1)
  • X=X & (X-1) 清零最低位的1
  • X & -X 獲得最低位的1

1.判斷一個數是不是奇數仍是偶數

解法一:直接與2取模,看結果是否等於0bash

public boolean isEven(int x){
    return (x % 2) == 0
}
複製代碼

解法二:判斷一個數是否爲偶數,也就是說判斷該數的二進制數最後一位是否爲0,任何數與1(二進制的1是0001)作與運算,也就是計算該數的最後一位與1作與運算,只有最後一位爲1,那麼就爲奇數,爲0則爲偶數。ui

public static boolean isEven(int x) {
    return (x & 1) == 0;
}
複製代碼

2.判斷一個數是不是2的N次冪

思路:2的n次冪的二進制數都有一個規律,就是首位爲1,其他爲都爲0。譬如2--10 ,4--100,8--1000,16--10000等等 而上面例子中的x&(x-1)能夠清零二進制中最低位一個1spa

public boolean IsPowerOf(int n) {
        return (n & (n - 1)) == 0;
    }
複製代碼

擴展 求一個 n 位的整數的二進制表式中有x個1

相關文章
相關標籤/搜索