二进制中1的个数-剑指Offer
二进制中1的个数
题目描述
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
思路
- 若右移整数,需要考虑是否正负数,所以用一个1来左移,来依次和每位与运算
- 还有一种解法比较巧妙,因为第一个解法的整数有多少位就比较多少位,这个解法可以实现有多少1就比较多少次
代码
解法一:
public class Solution {
public int NumberOf1(int n) {
int flag = 1;
int count = 0;
while(flag != 0) {
if ((n & flag) != 0) {
count++;
}
flag = flag << 1;
}
return count;
}
}
解法二:
public int NumberOf(int n) {
int count = 0;
while (n != 0) {
count++;
n = (n - 1) & n;
}
return count;
}