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

C++中实现无符号整数最低两个比特位交换的最快方法

交换无符号整数最低两个比特位的最快方案

实现代码

直接用无分支位运算实现,所有操作均为CPU原生支持的单周期指令,性能最优:

unsigned int x = 883621;
// 仅需一行完成交换
x ^= (((x ^ (x >> 1)) & 1U) * 3U);

运行逻辑说明

我们需要交换的是整数的第0位(最低位)和第1位,两种情况处理逻辑完全统一,无需分支判断:

  • 若两位值相同(同为0或同为1),交换后数值无变化,不需要做任何修改
  • 若两位值不同,仅需同时翻转这两位,即可完成交换

逐段解释运算逻辑:

  1. x ^ (x >> 1):把x右移1位后和原数做异或运算,如果最低两位不同,运算结果的第0位会是1,否则为0
  2. & 1U:提取出上述判断位,得到的结果只能是0或1
  3. * 3U:把判断位转换为掩码,1乘3得到二进制11,0乘3得到00,编译器会自动把乘3优化为(bit << 1) + bit,不会产生额外乘法开销
  4. 最后和原数异或:掩码为00时数值不变,掩码为11时翻转最低两位,刚好完成交换

效果验证

  1. 输入x=883621,二进制最低两位为01:
    判断位计算结果为1,掩码为11,异或后最低两位变为10,完全符合预期输出
  2. 输入x=7(二进制0b111,最低两位为11):
    判断位计算结果为0,掩码为00,数值保持7不变,符合补充要求

内容的提问来源于stack exchange,提问作者Mojtaba Valizadeh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 01:39:03