题目描述
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
C++的位移运算 右移 >>, 左移 <<
- 逻辑位移:高位补0
- 算术位移:高位补符号位
Java:
>>
算术位移>>>
逻辑位移
class Solution {
public:
int NumberOf1_(int n) {
int cnt = 0;
if (n < 0) {
n = n & 0x7FFFFFFF;
cnt++;
}
while (n != 0) {
if ((n & 1) == 1) {
cnt++;
}
n >>= 1;
}
return cnt;
}
int NumberOf1(int n) {
int cnt = 0;
while (n != 0) {
n = n & (n-1);
cnt++;
}
return cnt;
}
};