题目:
编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量)。
示例 1:
输入:00000000000000000000000000001011
输出:3
解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 '1'。
示例 2:
输入:00000000000000000000000010000000
输出:1
解释:输入的二进制串 00000000000000000000000010000000 中,共有一位为 '1'。
示例 3:
输入:11111111111111111111111111111101
输出:31
解释:输入的二进制串 11111111111111111111111111111101 中,共有 31 位为 '1'。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/number-of-1-bits
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
分析:
这道题中可以采用&1的操作来判断末尾的一位是否为1,1的二进制形式为0000 0000 0000 0000 0000 0000 0000 0001,按位&的规则是二者均为1则结果为1,否则结果为0。由于1的二进制的前31位都为0,所以与它做&运算的数的前31位不论为多少,结果的前31位都为0。最后一位由于1的二进制最后一位为1,那么与它做&运算的数为1,则结果的最后一位也为1,否则为0。
简而言之,最终结果的前31位数已经确定为0,最后一位数为1还是为0由和1做&运算的那个数决定。
由于有32位所以循环32次来进行32次判断,每判断一次后,将判断过的位右移一位丢弃掉。
代码:
public class Solution { public int hammingWeight(int n) { int count = 0; for (int i = 0; i < 32; i++) { if ((n & 1) == 1) count++; n >>= 1; } return count; } }