题目
题号:11
题目名:二进制中1的个数
编程语言
Java
题目描述
输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。
初次思路
1.首先,这里的整数并不是十进制的,是二进制"01010101…"这样的整数(算是小坑,没注意)
2.n-1可以将n最右边的1的右边的所有0变成1,最右边1变成0
3.n&n-1可以直接将n的最右边的1变成0
4.从左往右统计1的数量,如果变成0了那就是统计完了
解题代码
public class Solution {
public int NumberOf1(int n) {
int res = 0;
//每次将最右边的1变成0
while(n != 0) {
//从右边往左边统计1的个数
res++;
//n-1后,n最右边的1的右边的0全部变成1,在经过与运算后,将包括最右边的1的右边所有变成0
n &= n - 1;
}
return res;
}
}