二进制中1的个数

问题描述

输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。比如输入9,,9的二进制表示是1001,1的个数是2,所以输出2

思路分析

如果一个数与该数减一的结果进行与运算,会把该数低位第一个1变成0,而高位不变,比如1100(12),减一后就变成1011(11),也就是说建议后,也就右边位1变0,0变1,与位操作后就是少了一个1,如1100&1011,变成1000,一次类推,最终得到结果

码上有戏

1
2
3
4
5
6
7
8
9
public int Number(int n){
int sum=0;
while(n!=0)
{
sum++;
n=n&(n-1);
}
return sum;
}

热评文章