题目leetcode191
编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 '1' 的个数
示例
输入:00000000000000000000000000001011
输出:3
直接循环检查给定整数 n 的二进制位的每一位是否为 111。
public class Solution {
public int hammingWeight(int n) {
int ret = 0;
for (int i = 0; i < 32; i++) {
if ((n & (1 << i)) != 0) {
ret++;
}
}
return ret;
}
}
使用 n & (n−1) 把 n 的二进制位中的最低位的 1 变为 0
然后不断让当前的 n 与 n−1 做与运算,直到 n 变为 0 即可。
public class Solution {
public int hammingWeight(int n) {
int ret = 0;
while (n != 0) {
n &= n - 1;
ret++;
}
return ret;
}
}