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

使用二进制序列追踪空箱状态的GAS编程算法问询

位掩码(Bitmask)追踪空箱状态的实现方案

你提到的用二进制整数记录多个二值状态的方法,标准名称是位掩码(Bitmask),这是编程中常用的状态压缩技巧,适合追踪多个开关状态的场景。

以下是针对你需求的具体实现算法(以14个箱子为例,箱子编号从1到14):

一、识别哪些箱子为空

假设控制值为controlValue,对于第k个箱子(1≤k≤14),通过按位与操作判断状态:

  • 计算对应位的掩码:mask = 1 << (k - 1)(将1左移k-1位,得到该箱子的二进制位标记)
  • 若 controlValue & mask !== 0,说明该位为1,对应箱子为空;
  • 若结果为0,说明该位为0,对应箱子非空。

示例(对应你3个箱子的设定):

  • 控制值为5(二进制101),判断箱子1:5 & 1 = 1 ≠ 0 → 箱子1为空;判断箱子2:5 & 2 = 0 → 箱子2非空;判断箱子3:5 & 4 = 4 ≠ 0 → 箱子3为空,和你描述的“箱子1和3为空”一致。

二、更新控制值(箱子填满或清空)

1. 箱子k被填满(从空变非空)

将对应位从1改为0,使用按位与取反操作:

controlValue = controlValue & ~(1 << (k - 1));

示例:控制值为3(箱子1和2为空),填满箱子1后,3 & ~1 = 2,对应控制值2(仅箱子2为空)。

2. 箱子k被清空(从非空变空)

将对应位从0改为1,使用按位或操作:

controlValue = controlValue | (1 << (k - 1));

示例:控制值为2(仅箱子2为空),清空箱子1后,2 | 1 = 3,对应控制值3(箱子1和2为空)。

3. 特殊设定适配(如你示例中的反向映射)

如果你坚持示例里“所有箱子为空对应0、无空箱对应7”的反向设定(即1代表非空,0代表空),只需调整逻辑:

  • 判断空箱:controlValue & mask === 0
  • 填满箱子:controlValue = controlValue | mask(将位设为1,标记非空)
  • 清空箱子:controlValue = controlValue & ~mask(将位设为0,标记为空)
  • 所有箱子为空:直接设controlValue = 0
  • 无空箱:设controlValue = (1 << 14) - 1(14个1的二进制数)

只要保持位含义与逻辑操作一致,核心都是位掩码的应用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 10:42:23