
心有灵犀为您分享以下优质知识
计算二进制中1的个数有多种方法,以下是主要思路及实现方式:
一、逐位统计法(最基础)
通过循环右移并判断最低位是否为1,统计1的个数。适用于所有整数(需注意负数处理)。
示例代码(Python):
```python
def count_bits(x):
count = 0
while x:
count += x & 1
x >
>
= 1
return count
```
二、位运算优化法
通过不断将最右边的1变为0,统计1的个数。每执行一次操作,最右边的1会消失,因此循环次数等于1的个数。
示例代码(Python):
```python
def count_bits_optimized(x):
count = 0
while x:
x &= x - 1
count += 1
return count
```
将32位整数按位分组(如0-15, 16-31等),每组内1的个数相同,通过计算组数和剩余数快速统计。适用于32位整数。
示例代码(Python):
```python
def count_bits_grouping(x):
count = 0
for i in range(32):
计算当前位为1的数的个数
count += (x >
>
i) & 1
return count
```
三、处理负数
在32位系统中,负数以补码形式存储,最高位为符号位。统计时需考虑补码特性,例如-1的二进制全为1,结果为32。
四、区间统计法
若需统计[L, R]区间内所有数的1的个数,可遍历区间并累加每个数的1的个数,或利用位运算特性优化计算。
总结:
效率优先:推荐使用`n & (n-1)`法(时间复杂度O(k),k为1的个数)或分治法(时间复杂度O(32))。- 通用性:逐位统计法适用于所有整数,但效率较低(时间复杂度O(32))。- 负数处理:需注意补码表示,或限定输入范围为非负数。