题目描述
题解
方法一: 按位与运算
第一个方法就是常规方法, 一个数如果&1
, 结果就是该数二进制的末位数字, 所以最直观的方法就是让数字和1
进行与运算, 然后右移该数, 当把该数字右移成0了, 说明遍历结束
1 | public int hammingWeight(int n) { |
方法二: 巧妙利用n&(n-1)
(n−1) 解析: 二进制数字 n 最右边的 1 变成 0,此 1 右边的 0 都变成 1 。
n & (n - 1) 解析: 二进制数字 n 最右边的 1变成 0,其余不变。
简单来说就是每次进行n&(n-1)运算, 结果都会将最右边的1变成0
一共能进行几次该运算, 则说明一共有多少1
1 | public int hammingWeight(int n) { |