问题:
计算在一个 32 位的整数的二进制表式中有多少个 1。
样例:
给定 32 (100000),返回 1。
给定 5 (101),返回 2。
给定 1023 (111111111),返回 9。
分析:
1、需要考虑是负数的情况,如果是负数,则二进制的第一位为1,首先需要处理这个1,即:num^0x80000000
2、然后计算剩下的1,依次检查该数转化为二进制时的每一位。即每次与1相&,并检测是否为1,然后将该数向右移动一位。
代码:
class Solution {
public:
int countOnes(int num) {
int count = 0;
if (num < 0) {
count++;
num = num ^ 0x80000000;
}
while (num > 0) {
if (num & 1) {
count++;
}
num = num >> 1;
}
return count;
}
};