题目描述
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
时间限制:1秒 空间限制:32768K 热度指数:431455
解题思路:本题主要考察位操作,C++中的一个int占四个字节,与操作是符号&, 左移位操作符号为<<。本题没有什么太绕的东西,就是考验位操作的熟练度。输入一个int型(默认的int为有符号类型)的数n, 我们只要遍历n的每一位就好了,借助无符号数m,其中m取值:1、2、4、8.....;对于二进制而言就是取值为 0000 0000 0000 0000 0000 0000 0000 0001、0000 0000 0000 0000 0000 0000 0000 0010、0000 0000 0000 0000 0000 0000 0000 0100.....使得每一次只关注于n某位上的值是否为1即可,再设定一个计数器进行计数。
C++的代码如下
class Solution {
public:
int NumberOf1(int n) {
int count = 0;
unsigned int m = 1;
while(m > 0) {
if((n & m) > 0) {
count++;
}
m = m <<1;
}
return count;
}
};