题目描述
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
基础回顾
在做之前,我们可以先回顾一下补码,反码的基本知识。
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/c84b483ea994186514b10cb28a8d03fb.jpeg)
思路解析
一个二进制数n,将该n减去1之后再与n做与运算,会将该二进制n最右边一个1变成0。所以二进制n有多少个1,就可以进行多少次该操作。![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/adcc61c977070e3b93b8773edcafd458.jpeg)
代码实现
public class Solution {
public int NumberOf1(int n) {
int count = 0;
while(n!=0){
count++;
n = n & (n-1);
}
return count;
}
}
运行效果如下:
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/39fd88054e57fa48afcc21224c98f86d.png)