在 int 变量中查找 '1 数的奇偶校验
Finding parity of number of '1's in a int variable
给定一个int变量,我想检查它的二进制表示中的'1'是偶数还是奇数。它可以通过像
这样的xor操作来实现。int n;
int s = 0;
for(;n;n>>=1)
s ^= (n&1);
在c++中有更好的方法吗?注意:我不是要求'1'的数量,而是要求它的奇偶性,所以我认为可能有一些比我的更好的代码。
uint32_t v = somevalue;
v ^= v >> 1;
v ^= v >> 2;
v = (v & 0x11111111U) * 0x11111111U;
bool parity = (v >> 28) & 1;
从https://graphics.stanford.edu/ ~ seander/bithacks.html
它也有64位的变体。
澄清一下,"奇偶校验"不是指数字在数学上是偶数还是奇数,而是指它的二进制表示中1位的计数是偶数还是奇数;如https://en.wikipedia.org/wiki/Parity_bit所述。在数学意义上,问题中的代码没有意义,所以我假设OP的意思是一样的。语句
我不是在问'1'的个数,而是它的奇偶性
则意味着他/她只是想知道1计数是偶数还是奇数,
但不是1的确切数目
如果您确实追求速度,您可以将所有字节值0..255的位数(或其奇偶校验)制表。然后在变量上映射一个联合或使用移位/掩码,为四个字节累积。
更快,更偏执,为所有短值0..65535制表
相关文章:
- 如何用尽可能少的数据将数据缓冲区计算为零校验和值
- 计算校验和的逐位运算符
- 如何从存储在 QByteArray 中的十六进制值计算校验和
- 如何在 c++ 中计算对象的哈希/校验和/指纹?
- 此代码如何计算数字的奇偶校验?
- C++文件传输的校验和算法
- 如何从 IP 校验和字段中计算十六进制值
- 计算句子的校验和(XOR)(由不同变量/类型的组合形成)
- 目录校验和
- 按奇偶校验对数组进行排序 结果并不可靠
- 编译后如何计算某些二进制功能(或基本块)的校验和
- 这是确定两个数字是否具有相同奇偶校验的正确方法
- 并行计算奇偶校验
- 串行端口奇偶校验检查在升压 asio 中失败
- 将C++串口奇偶校验更改代码从 Linux 移植到 Windows
- 这个代码如何使用64位乘法和模除法计算字节的奇偶校验
- 在 int 变量中查找 '1 数的奇偶校验
- 是否可以使用boost.asio实现标记和空间奇偶校验?
- 十进制奇偶校验
- CRC/奇偶校验/汉明保护16位并行总线