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

如何用整数表示二进制选项集并在后续解码?

我知道大多数语言都有内置函数能实现这个功能,但我一直觉得这是给函数传选项的巧妙技巧,所以别推荐内置函数。我甚至不觉得这是好的编程实践,但这个问题困扰我好几年了。

核心思路

传入单个整数参数$myOptions,用它代表多个开关型二进制选项。后续可能会新增选项,目前暂不确定具体内容。每个选项定义如下:

mFoo = 1
mBar = 2
mFoobar = 4
mFubar = 8
mPhoobar = 16
mPhubar = 32

选项取值规律

每个选项对应二进制位位置的2的幂:

  • 位置0:mFoo = 2⁰ = 1
  • 位置1:mBar = 2¹ = 2
  • 位置2:mFoobar = 2² = 4
  • 位置3:mFubar = 2³ = 8
  • 位置4:mPhoobar = 2⁴ = 16
  • 位置5:mPhubar = 2⁵ = 32

新增选项的取值逻辑很清晰——按二进制位顺序取下一个2的幂即可。使用时,将需要开启的选项对应值相加得到总和,后续再解码这个总和来判断哪些选项被开启。例如,要开启除mFubar外的所有选项,总和为1+2+4+16+32=55。

解码方法

我一直记不清如何解码这个整数来判断某个选项是否开启。反复尝试后发现,使用按位与运算符(C#中为&)即可实现。比如判断mFubar是否开启,执行以下检查:

(55 & mFubar) != 0

55与8按位与的结果为0,说明mFubar未开启;同理,检查mPhoobar(值为16)时,55&16的结果为16,不等于0,说明该选项已开启。

我的疑问

我是不是遗漏了什么?我记得这个方法看似简单,实则可能存在隐藏的问题。随着OOP的普及,这种选项处理方式已经成为老旧的编程遗留技巧,但在过去系统资源匮乏的年代,它确实非常实用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 13:09:59