jz15.二进制中1的个数

题目描述

题解

方法一: 按位与运算

第一个方法就是常规方法, 一个数如果&1, 结果就是该数二进制的末位数字, 所以最直观的方法就是让数字和1进行与运算, 然后右移该数, 当把该数字右移成0了, 说明遍历结束

1
2
3
4
5
6
7
8
public int hammingWeight(int n) {
int res = 0;
while (n != 0) {
res+=n&1;
n=n>>>1;
}
return res;
}

方法二: 巧妙利用n&(n-1)

(n−1) 解析: 二进制数字 n 最右边的 1 变成 0,此 1 右边的 0 都变成 1 。

n & (n - 1) 解析: 二进制数字 n 最右边的 1变成 0,其余不变。

简单来说就是每次进行n&(n-1)运算, 结果都会将最右边的1变成0

一共能进行几次该运算, 则说明一共有多少1

1
2
3
4
5
6
7
8
public int hammingWeight(int n) {
int res = 0;
while (n!=0){
res++;
n = n&(n-1);
}
return res;
}
-------------本文结束感谢您的阅读-------------
可以请我喝杯奶茶吗