题解 | 求int型正整数在内存中存储时1的个数
可以使用 Java 位运算 来高效计算整数 nnn 的二进制表示中 111 的个数。这是经典的 汉明重量问题(Hamming Weight),以下是解决方法及其解释。
代码解释
- 输入与初始化使用 Scanner 接收一个整数 nnn。初始化计数器 count = 0,用于记录二进制中 111 的个数。
- 核心逻辑使用 n & 1 检查 nnn 的最后一位是否为 111:如果最后一位为 111,则 n & 1 = 1,将 countcountcount 加 111。如果最后一位为 000,则 n & 1 = 0,计数器不变。使用 n >>= 1 将 nnn 右移一位,即移除已经检查过的最低位。
- 循环结束条件当 n==0n == 0n==0 时停止循环。此时所有位都已处理完。
- 输出结果输出 count,即 111 的个数。
import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); // 注意 hasNext 和 hasNextLine 的区别 int n = in.nextInt(); int count = 0; while (n != 0) { count += (n & 1); // 检查最后一位是否为 1 n >>= 1; // 将 n 右移一位 } System.out.println(count); } }