You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 18:06:00