题目描述
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
时间限制:1秒 空间限制:32768K 热度指数:313811
思路
不可以将数一次一次右移,因为负数右移补1,会造成死循环,因此将1一次次左移,判断每一位是否是1
class Solution {
public:
int NumberOf1(int n) {
int flag=1;
int t=0;
do{
if(n&flag)
++t;
flag=flag<<1;
}
while(flag!=0);
return t;
}
};
参考其他人代码:
思路是将n与n-1做与运算,每次会去掉n最右边的1(算一下就知道了),循环到n为0