《每周一个算法题》-位运算

先理解与,或,异或

符号 描述 运算规则
& 两个位都为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

相关文章
相关标签/搜索