如何用C++编写一个函数来计算给定整数的0的补码表示中1的个数,即非零元素的个数(也称为汉明重量)?
时间: 2024-10-23 20:11:53 浏览: 33
补码:计算一个无符号整数的补码值-matlab开发
在C++中,你可以通过位运算来计算一个整数的二进制表示中1的个数,这通常被称为汉明重量。这里提供一种简单的方法,使用按位与操作和移位操作:
```cpp
#include <climits> // 包含INT_MAX以便处理负数
unsigned int hammingWeight(int n) {
unsigned int count = 0;
while (n != 0) {
count += n & 1; // 如果最低位是1,count加1
n >>= 1; // 将n右移一位,丢弃最低位
}
return count;
}
// 或者,更简洁的形式,直接使用__builtin_popcountll(对于64位系统)
size_t hammingWeight(int n) {
return __builtin_popcountll(n);
}
```
上述`hammingWeight`函数会返回整数`n`的二进制表示中1的个数。如果输入是负数,则需要先将其转换为其无符号等价值。`__builtin_popcountll`是一个平台相关的函数,它直接计算64位整数的汉明重量,效率较高。
阅读全文