计算在一个 32 位的整数的二进制表示中有多少个 1.
样例
给定 32 (100000),返回 1
给定 5 (101),返回 2
给定 1023 (1111111111),返回 10
代码一:此题如果采用的是移位的方法,那么这里唯一需要注意的是当给定的测试用例是负数的时候要先计算位于负号位的1,然后转化为正整数之后再进行移位的操作和计数。
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;
}
代码二:这种方法还是比较巧妙,这里的数字本身和减一之后的数相与让我想起了计算数是否为2的幂次的程序。
int countOnes(int num){
int count = 0;
while(num){
num = num & (num-1);
count++;
}
return count;
}