题目描述
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
提交链接:点击
思路:
具体的可参考下个。 另外一种方法思路就是用无符号循环右移。因为考虑到负数的补码原因!
代码:
class Solution { public: int NumberOf1(int n) { int count=0; while(n!=0){ n=n&(n-1); //n-1是将从右边往左边数遇到的第一个1后面的0变为1,这个1变为0 n&(n-1)则是每次将最右边的1变为0,然后计数 count++; //如n=1010 (n-1)=1001 n&(n-1)=1000 } return count; } };