题目描述
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
package com.jianzhioffer;
public class NumberOf1Test {
public static void main(String[] args){
int res = NumberOf1(7);
System.out.println("============"+res);
res = NumberOf1(-5);
System.out.println("============"+res);
res = NumberOf1_(7);
System.out.println("============"+res);
res = NumberOf1_(-5);
System.out.println("============"+res);
}
public static int NumberOf1_(int n){
int count=0;
while(n!=0){
count++;
n=(n-1)&n;//由于每次n和n-1相与都会导致,n的最右边的为1的元素变成0,因此总共要循环的次数就是1的个数次。
}
return count;
}
public static int NumberOf1(int n) {
int tag=1;
int count=0;
while(tag!=0){
// 0000 0111
// 0000 0001
//System.out.printf("%d, %d, %d\n",n, tag, n&tag);
if((n&tag)!=0)
count++;
tag=tag<<1;
}
return count;
}
}