题目描述

  • 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。

思路

先区分正负数,正数,正常二进制,数数即可。
            负数,正常二进制的补码(最高位为标记位,1代表负数,剩下位取反后加1)。java中int是4字节,32位,需要注意。
在底层,正负数的确是是以二进制的方式存在的,并且负数就是补码的形式.
&的方式,可以检验出数据中是否含有0,如果有0, 那么返回就是0。
n!=0;那么起码有1个1;
(n - 1) & n;&的方式,可以保留左侧相同的部分留下,右侧数值都是1的。并缩减了比较次数。

Java 1.8

1
2
3
4
5
6
7
8
9
10
public class Solution {
public int NumberOf1(int n) {
int i = 0;
while(n != 0){
i++;
n = (n - 1) & n;
}
return i;
}
}