题目描述
输入一个32位整数,输出该数二进制表示中1的个数。
感受
1.n>>k&1,可以确定最低位是0还是1,可以通过循环不断消位,统计1的数量
2.负数右移,空出来的位置会补1,可以先对负数取反,判断出1的个数,然后去总位数减去1的个数,就是原来1的个数
class Solution {
public:
int NumberOf1(int n) {
int k=0;
int c=0;
bool st=false;
if(n<0)n=~n,st=true;
while(n>>k){
if(n>>k&1)c++;
k++;
}
if(st)c=32-c;
return c;
}
};