计算二进制中一的个数
时间: 2025-06-27 07:18:36 浏览: 24
计算二进制中“1”的个数是一个常见的编程任务,尤其在网络、加密等领域非常有用。以下是几种常用的方法:
### 1. **逐位检查法**
最简单直接的方式就是通过循环逐位检查每一位是否为`1`。你可以将数字右移一位并检查最低位。
```python
def count_ones(n):
count = 0
while n > 0:
if n & 1 == 1: # 检查最后一位是不是1
count += 1
n >>= 1 # 右移一位
return count
print(count_ones(5)) # 输出:2 (因为5的二进制表示是101)
```
这种方法的时间复杂度取决于输入数值的有效位数,即O(log₂n)。
### 2. **Brian Kernighan 算法**
这是一个更高效的算法,它利用了这样一个事实:“对于任意整数x,将其与 x−1 进行按位与操作会把右边起第一个 `1`变为`0`”,因此只需要对这个过程计数即可得到结果。
```cpp
int countOnes(int num){
int cnt = 0;
while(num != 0){
num &= (num - 1); // 去掉最后一个1
++cnt; // 统计次数
}
return cnt;
}
```
此方法效率更高,在最好的情况下只需遍历一次所有非零比特的位置,时间复杂度也是 O(k),其中 k 表示的是数字中有多少个‘1’。
### 3. **内置函数法**
现代高级语言通常提供了一些内建库函数可以直接完成这项工作,如Python中的`.bit_count()` 或者 C++ 中 `<bitset>` 库提供的 `.count()`.
例如 Python 的写法:
```python
number = 7 # 十进制数转换成二进制字符串:"111"
binary_str = bin(number)[2:] # 切片去掉前缀 "0b" ,只保留真正的二进制串
one_counts = binary_str.count('1')
print(one_counts) # 输出:3
```
或者使用新版本 python 内置 .bit_count():
```python
number = 7
one_counts = number.bit_count()
print(one_counts) # 输出:3
```
以上三种方式都可以有效统计出给定正整数对应的无符号二进制表达式里有多少个'1'. 根据实际应用场景选择最适合的一种实现。
阅读全文
相关推荐











