位运算

1. 判断性质

1.1 是否是2的幂

相似于力扣231

题目: 判断一个数是否是2的幂次方,若是,并判断出来是几次幂。

题解:
解释借鉴hackbuteer1, 力扣-作者jyd

  1. 恒有 n & (n - 1) == 0,这是因为:
    n 二进制最高位为 1,其余所有位为 0;
    n−1 二进制最高位为 0,其余所有位为 1;
  2. 一定满足 n > 0。
public boolean isPowerOfTwo(int n) {

    // 首先n必须是正数,其次n&(n-1)等于0
    return (n>0) && ((n&(n-1))==0);

}

1.2 二进制中1的个数

相似于力扣191

题解:
借鉴力扣题解,作者leetcode
关键的想法是对于任意数字 n ,将 n 和 n−1 做与运算,会把最后一个 1 的位变成 0,为什么?
答:在二进制表示中,数字 n 中最低位的 1 总是对应 n−1 中的 0 。因此,将 n 和 n−1 与运算总是能把 n 中最低位的 1 变成 0 ,并保持其他位不变。一直持续这个过程只到 n 变成 0。

public int hammingWeight(int n) {

    int count_one = 0;
    while(n!=0){
        n &= n-1;
        count_one++;
    }
    return count_one;

}
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务