位运算
1. 判断性质
1.1 是否是2的幂
相似于力扣231
题目: 判断一个数是否是2的幂次方,若是,并判断出来是几次幂。
题解:
解释借鉴hackbuteer1, 力扣-作者jyd
- 恒有 n & (n - 1) == 0,这是因为:
n 二进制最高位为 1,其余所有位为 0;
n−1 二进制最高位为 0,其余所有位为 1; - 一定满足 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; }