题解 | #求int型正整数在内存中存储时1的个数#
求int型正整数在内存中存储时1的个数
https://www.nowcoder.com/practice/440f16e490a0404786865e99c6ad91c9
使用逻辑与运算解决
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
final int bit = 32;
Scanner in = new Scanner(System.in);
int num = in.nextInt();
/*
例如:一个数字 83,和它的二进制表示 1010011,即把 1 的数字都相加,
64 + 16 + 2 + 1 = 83,注意 ... 的意思是前方有 32 位省略表示:
... 64 32 16 8 4 2 1
... 1 0 1 0 0 1 1
得到之后,开始与 1 进行取按位与运算(&),因为 0 & x 为 0,如果最后 = 1,说明此位是 1
... 1010011
... 0000001
&
------------------------------------
... 0000001
此位比较完毕,再无符号右移 1 位,变为
... 0101001 >>> 1(被挤出去)
... 0000001
&
------------------------------------
... 0000001
*/
int count = 0;
for (int i = 0; i < 32; i++) {
if((num & 1) == 1) {
count ++;
}
// 无符号右移
num = num >>> 1;
}
System.out.println(count);
}
}
