Python中如何通过直接位操作实现XOR判断整数二进制1的个数奇偶性
整数二进制1位总数奇偶性判断的纯位操作实现
完全不需要逐位遍历、也不需要分字节操作的方案确实存在,核心逻辑是利用异或运算的模2加特性:所有二进制位异或的结果为1时,说明1的总个数是奇数,结果为0则是偶数。
基础实现方案
32位整数示例(C语言)
// 返回1表示1的个数为奇数,返回0表示为偶数 int has_odd_set_bits(uint32_t n) { n ^= n >> 16; n ^= n >> 8; n ^= n >> 4; n ^= n >> 2; n ^= n >> 1; return n & 1; }
64位整数扩展版本
只需要在最前面增加一次高位合并即可:
int has_odd_set_bits_64(uint64_t n) { n ^= n >> 32; n ^= n >> 16; n ^= n >> 8; n ^= n >> 4; n ^= n >> 2; n ^= n >> 1; return n & 1; }
方案说明
- 每次右移后和原值异或,本质是把高位的统计信息逐层合并到低位,全程没有循环、没有字节级操作
- 32位整数仅需要5次移位+异或操作,64位也仅需要6次,时间复杂度为固定的O(1),位宽越大,和逐位异或方案的效率差距越明显
编译器优化版本
如果使用GCC/Clang等编译器,可以直接调用内置函数,编译时会自动优化为对应CPU的硬件奇偶校验指令,性能更高:
// 32位整数奇偶校验 int res = __builtin_parity(n); // 64位整数奇偶校验 int res_64 = __builtin_parityll(n64);
内容的提问来源于stack exchange,提问作者user_name01910191
相关产品推荐
相关产品推荐

