剑指offer——二进制中1的个数
问题描述
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
思路分析
1.判断输入的整数是否为0,显然0的二进制中没有1,所以返回0。
2.利用按位与的思路,将n与n-1相与,依次从右边消除1,直到为0,并统计1的个数。
补充说明:
按位与(&):对应位置都为1,取1。
按位或(|): 对应位置有1就取1。
如:当n=6,n-1=5时:
0110(6) 0100(5)
& 0100(5) & 0011(4)
—————————— ---> ——————————
0100 0000
count=1 count=2
代码
public class Solution {
public int NumberOf1(int n) {
int count=0;
if(n==0){
return 0;
}
while(n!=0){
count++;
n=n&(n-1);
}
return count;
}
}