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

如何用无循环无分支位操作高效检测64位无符号整数任意位含0b11111模式

64位无符号整数连续5个全1位无分支检测实现

判定规则与实现约束

  • 核心判定逻辑:给定任意64位无符号整数,只要其在任意起始位偏移上存在连续5个全1位(允许跨固定位分组边界),即判定为有效;若所有位置的连续全1位最长不超过4个,即判定为无效。
  • 检测场景覆盖范围:连续5个1出现在位偏移0、1、2、4等任意位置,甚至多段连续5个1同时存在的情况,均需正确识别。
  • 实现硬约束:检测全程不能使用循环、分支语句,仅通过算术、逻辑、位操作完成单次校验,最大化运行效率。

现有方案的局限性

  • 此前参考固定分块的零块检测思路,尝试将目标模式(连续5个1)取反为全0块做对齐检测,但该方法仅能识别按5位长度对齐划分的固定区间(如bit0-4、bit5-9这类整段对齐的5位块),完全无法覆盖跨分组的任意偏移连续5个1场景,例如连续5个1从bit1开始(覆盖bit1-5)的情况会直接漏检。

无分支检测实现方案

核心原理

通过多次移位后按位与的方式,将所有可能的连续5个1的模式统一映射为可直接检测的置位标记,全程无分支、无循环:
对输入值x依次构造移位序列,再做连续按位与:

// C语言实现,输入为64位无符号整数
uint64_t detection_result = x & (x >> 1) & (x >> 2) & (x >> 3) & (x >> 4);

该表达式的数学含义为:

  • 结果的第i位为1,等价于原数x的第i、i+1、i+2、i+3、i+4位全部为1,也就是从i位开始存在一组连续5个全1位。
  • 只要detection_result为非零值,就说明存在至少一组符合要求的连续5个1,完全覆盖所有可能的起始偏移位置,不存在固定分块的漏检问题。

方案特性

  • 检测范围完全覆盖所有位偏移的连续5个1场景,无边界遗漏。
  • 全流程仅包含4次逻辑右移、4次按位与操作,无循环、无分支,指令数固定,执行效率远高于循环逐位检测或固定分块检测方案。

验证用例

  • 输入值为0b11111(bit0开始的连续5个1):计算结果为非零值,判定有效。
  • 输入值为0b111110(bit1开始的连续5个1):计算结果为非零值,判定有效。
  • 输入值为0b1111(最长4个连续1):计算结果为0,判定无效。
  • 输入值为跨32位边界的连续6个1段:计算结果为非零值,判定有效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.31 18:54:03