
特立独行的兔子为您分享以下优质知识
要判断一个整数的二进制表示中有多少位为1,可以使用位操作来高效实现。以下是具体方法和代码示例:
一、核心方法:`x & (x - 1)`
- `5` 的二进制是 `101`,`5 - 1 = 4`(二进制 `100`),`5 & 4 = 4`(二进制 `100`);
- `7` 的二进制是 `111`,`7 - 1 = 6`(二进制 `110`),`7 & 6 = 6`(二进制 `110`)。
- 初始化计数器 `count` 为 `0`;
- 当 `x` 不为 `0` 时,执行 `x = x & (x - 1)` 并将 `count` 加 `1`;
- 当 `x` 为 `0` 时,结束循环,`count` 即为二进制中 `1` 的个数。
二、代码示例
以下是使用 C、Java 和 C++ 实现的代码示例:
C 语言实现
```c
include
int countones(unsigned int x) {
int count = 0;
while (x) {
x = x & (x - 1);
count++;
}
return count;
}
int main() {
unsigned int num = 29; // 二进制 11101
printf("Number of 1s in binary: %dn", countones(num));
return 0;
}
```
Java 实现
```java
public class Countones {
public static int countones(int x) {
int count = 0;
while (x != 0) {
x = x & (x - 1);
count++;
}
return count;
}
public static void main(String[] args) {
int num = 29; // 二进制 11101
System.out.println("Number of 1s in binary: " + countones(num));
}
}
```
C++ 实现
```cpp
include
int countones(unsigned int x) {
int count = 0;
while (x) {
x = x & (x - 1);
count++;
}
return count;
}
int main() {
unsigned int num = 29; // 二进制 11101
std::cout