1.题目描述
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
方法一:首先想到的思路:
public class Solution {
public int NumberOf1(int n) {
int x = 1;
int count = 0;
while(x!=0){ //这里能换成x>0吗
if((n&x)!=0){ //这里能换成(n&x)==1吗
count++;
}
x = x<<1; //左移一位
}
return count;
}
}
注意点:while(x!=0)不能换成while(x>0); //因为x可能为负数
if((n&x)!=0)不能换成if((n&x)==1); //因为1000&1000不等于1
缺点:这样要比较16次,可不可以少比较呢。
方法二:可不可以将n右移动,代码实现
public class Solution {
public int NumberOf1(int n) {
int x = 1;
int count = 0;
while(n!=0){
if((n&1)==1){
count++;
}
n>>>=1;
}
return count;
}
}