编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量)。
示例 :
输入: 11
输出: 3
解释: 整数 11 的二进制表示为 00000000000000000000000000001011
示例 2:
输入: 128 输出: 1 解释: 整数 128 的二进制表示为 00000000000000000000000010000000
import java.util.*;
public class Main {
public static void main(String[] args)
{
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
System.out.println(Solution.hammingWeight(n));
}
}
class Solution
{
public static int hammingWeight(int n)
{
int flag = 1; //定义一个标志数1
int count = 0; //计数器
while (flag != 0) //当标志数没有溢出(位1在32位范围内)时循环
{
if((flag & n) != 0) //如果标志数与n求与结果不为0,则说明当前位为1
{
count++; //计数器加一
}
flag = flag<<1; //标志位左移
}
return count;
}
}
思路:定义一个一开始为1的标志数,与原数求与运算,结果为0则说明原数的当前位为0,结果不为0这说明当前位为1;
然后将标志数左移一位,再次求与判断,知道标志数溢出。