面试题 10:二进制中 1 的个数
tag: 位运算
leetcode: 191. 位1的个数
给定一个正整数 n,编写一个函数,获取一个正整数的二进制形式并返回其二进制表达式中
设置位
的个数(也被称为汉明重量)。
/**
* 6 & (6−1)=4,
* 6=(110)
* 4=(100)
* 110
* & 101
* 100 = 4
* 运算结果 4 即为把 6 的二进制位中的最低位的 1 变为 0 之后的结果
*
* @param n
* @return
*/
public static int hammingWeight(int n) {
if (n == 0) {
return 0;
}
int count = 0;
// n与n-1位与,相当于消除低位1
// 初始不等于0,则证明又1.并减去一位
while (n != 0) {
n &= n - 1;
count++;
}
return count;
}
public static int hammingWeight2(int n) {
if (n == 0) {
return 0;
}
int count = 0;
// 是把1左移,依次判断
for (int i = 0; i < 32; i++) {
if ((n & (1 << i)) != 0) {
count++;
}
}
return count;
}

被折叠的 条评论
为什么被折叠?



