在Java中,计算一个整数的二进制表示中1的个数,可以使用以下几种方法:
一、使用Java内置方法
Java提供了`Integer.bitCount()`方法,这是最简洁且高效的方式:
```java
public class Main {
public static void main(String[] args) {
int num = 29; // 二进制为 11101
System.out.println("1的个数: " + Integer.bitCount(num)); // 输出 4
}
}
```
该方法通过位运算优化计算效率,适用于正数和负数(负数按补码表示)。
二、手动计算方法
取反加一法 通过将数字减1后与原数进行与运算,每次操作消除最右边的1,循环直到结果为0,计数器记录次数。
```java
public class Countones {
public static void main(String[] args) {
int num = 29; // 11101
int count = 0;
while (num != 0) {
num = num & (num - 1);
count++;
}
System.out.println("1的个数: " + count); // 输出 4
}
}
```
位运算优化
利用`n & (n - 1)`每次消除最右边的1,效率高于逐位判断。
```java
public class BitCountOptimized {
public static void main(String[] args) {
int num = 29; // 11101
int count = 0;
while (num != 0) {
num = num & (num - 1);
count++;
}
System.out.println("1的个数: " + count); // 输出 4
}
}
```
查表法
预先计算0-255的1的个数,通过查表加速计算(适用于固定范围)。
三、其他方法
字符串转换法: 将整数转换为二进制字符串,统计'1'的个数(效率较低,不推荐)。 分治法
总结
推荐使用`Integer.bitCount()`:简洁且经过优化,适用于所有整数。
手动方法:适合学习位运算原理,`n & (n - 1)`形式效率较高。
其他方法:根据具体场景选择,如字符串操作或分治策略。