👉 题目来源:牛客网 —— 剑指Offer
题目描述 |
---|
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 |
思路 |
---|
一个二进制数n减1后与原二进制数进行&运算( 即n&(n-1) )会消去最右边的1 |
代码 |
---|
- C++
class Solution {
public:
int NumberOf1(int n) {
int count = 0;
while(n != 0){
n = n & (n-1);
count ++;
}
return count;
}
};
- Java
public class Solution {
public int NumberOf1(int n) {
int number = 0; // 1的个数
String s = Integer.toBinaryString(n); //整数转为二进制字符串
String [] split = s.split(""); //依次切分
for(int i = 0;i < split.length; i++){
if(split[i].equals("1"))
number ++;
}
return number;
}
}