题目描述
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
错误解法:(如果是负数最左边永远为1死循环)
class Solution {
public:
int NumberOf1(int n) {
int num = 0;
while(n) {
num += n&1;
n >>= 1;
}
return num;
}
};
正解1:
class Solution {
public:
int NumberOf1(int n) {
int num = 0;
while(n) {
num++;
n = n&(n-1);
}
return num;
}
};
本文对比了两种计算整数二进制表示中1的个数的方法,指出了一种常见错误解法的问题(负数处理不当),并提供了一种正确有效的解决方案,通过将数字与自身减一后的结果进行按位与操作,直至数字变为0,从而准确计算出所有1的数量。
1018

被折叠的 条评论
为什么被折叠?



