问题标签 [bitflags]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 位标志的简单布尔运算符
我正在尝试了解有关此内容的更多信息以在我的项目中实施。
我目前基本上得到了这个:
现在我想做一些更复杂的事情,我想做的是应用三个这样的标志:
然后删除标志0x1
并0x2
从中删除?我想我可以做这样的事情,应用按位非(和按位与应用它):
显然,当我检查时,它们仍然在那里或其他任何方式。
我也不知道如何检查它们是否不存在于位标志中(所以我无法检查我以前的代码是否有效),会是这样吗?
我从最近的搜索中找不到任何适用于此的资源,我愿意学习这个来教别人,我真的很感兴趣。如果这令人困惑或简单,我深表歉意。
c++ - 在 C++ 中键入安全(r)位标志?
在修改一些旧的 c++ 代码时,我遇到了几个定义为枚举的位标志。
这并不少见,但让我感到困扰的是,一旦您开始组合标志,您就会丢失类型信息。
对 SO 的一些搜索表明,我不是唯一 一个对此感到困扰的人。
一种替代方法是将标志声明为 #defines 或 const 积分,因此按位运算不会转换类型(可能)。这样做的问题是它允许我们的位集通过整数或其他枚举与不相关的标志混合。
我熟悉std::bitset和boost::dynamic_bitset,但两者都不是为了解决我的问题。我正在寻找的是类似于 C#'s FlagsAttribute的东西。
我的问题是,对于(更多)类型的安全位标志集,还有哪些其他解决方案?
我将在下面发布我自己的解决方案。
database-design - 在每个数据库引擎中存储二进制标志/布尔值的最佳方式是什么?
我已经看到了一些可能的方法(在一些数据库引擎中,其中一些是同义词):
- 小灵通(1)
- 布尔值
- 比特(1)
- 枚举(0,1)
- CHAR(0) 空
PHP支持的所有主要数据库引擎都应该注明,但作为参考,如果其他引擎也能注明,那就更好了。
我要求一种最适合阅读的设计。例如,使用 WHERE 条件中的标志字段进行选择,或按标志分组。性能比存储空间重要得多(除非大小对性能有影响)。
还有更多细节:
在创建表时我不知道它是否会稀疏(如果大多数标志都打开或关闭),但我可以稍后更改表,所以如果我知道有什么可以优化的,它应该是著名的。
此外,如果每行只有一个(或几个)标志,而不是许多(或很多)标志,则应该注意。
顺便说一句,我在某处读过以下内容:
使用 boolean 可能与使用 tinyint 做同样的事情,但是它具有在语义上传达您的意图的优势,这是值得的。
好吧,在我的情况下,它没有任何价值,因为每个表都由我的应用程序中的一个类表示,并且所有内容都在该类中明确定义并且有据可查。
vb6 - VB6 中的标志不返回正确的值
我目前正在尝试在 VB6/COM 项目中使用位标志枚举。但是,当尝试从枚举中读取值时,我得到不一致的结果。
这是枚举定义:
我有一个对象,它公开了 Fruits 类型的属性
应该能够读取该值的代码用于根据枚举的每个位的值显示/隐藏标签:
当执行此代码并且我拥有basket.AvailableFruits = 0
时,我得到 True 作为结果。
知道什么可能导致这种行为吗?
编辑 :
我尝试过使用 enum 的不同值:
作为一个侧节点,在调试代码时,如果我把表达式放在一个监视表达式中,我会得到正确的值;但是当在我的代码中评估表达式时,它仍然返回 True。
我尝试使用不同的检查语法:
当basket.AvailableFruits = 0
:-(
解决方案
在测试了不同的解决方案之后,我能够将问题缩小到 COM 组件。该组件的原始编码器将指针设置为 0 而不是将 0 作为值返回,这导致尝试读取值时出现问题。
我之所以选择 FlipScript 答案,是因为辅助函数似乎是提高代码可读性的一个好技巧。
c - 这是最优化的方式吗?C 位域
我做了一个函数来设置或清除 DWORD 中的特定位数。我的功能有效。我不需要帮助让它工作。但是,我想知道我选择的方法是否是最快的方法。
我很难解释这是如何工作的。有两个包含 DWORD 的数组,它们在 DWORD 的左侧和右侧填充了位(所有二进制 1)。它制作了一个掩码,除了我要设置或清除的位之外的所有位都已填充,然后使用基于该掩码的按位运算符设置它们。对于这样一个简单的任务,它似乎相当复杂,但它似乎是我能想到的最快方法。这比一点一点地设置要快得多。
c++ - opengl 着色器 (glsl) 中的 c++ 位标志
将我的位标志发送到片段着色器以便能够 if() 反对它的最佳方式是什么?
我有以下位标志(枚举):
对应表[] = 将i,j放在表中([bit as int])
因此,当在我的实际表中的每一行中选择所有第一个选项时,我的位标志(选项)的可能值将给我一个值 273。在每一行中,只能选择一个选项。
现在,当我想使用 bitflag 检查 CPU 上启用了哪些选项时,我可以简单地执行以下操作(对于选择第一列的示例):
这个想法是基于位标志中呈现的选择,执行着色器的不同部分。为此,我需要执行以下操作:
并跳过(在着色器中)禁用的其余选项。但是,在理想情况下,我想将其简化为使用位标志在 CPU 上完成的方式。所以在我的着色器中,我想有一些类似的东西:
是否有可能实现这样的目标。可能不是完全相同的东西,而是比简单的“if()-ing”更优雅的东西来对抗由位标志产生的所有可能的整数?(如:if(1+16+256), if(1 + 16 + 512),... if(8+128+2048))
core-audio - 带有 AudioRenderCallback 和 AudioUnitRenderFlag 的复音
我正在了解核心音频/音频单元,所以如果这不言而喻,请原谅我。
如果我想允许五个声音,我需要混音器上的 5 个总线和至少 5 个缓冲区,如果我想要 5 个不同的声音。我已经找到了一种通过检查时间和使用开始时间来安排笔记的基本方法。我认为我应该使用 ioActionFlags 来指示何时呈现静音,但我不太明白如何。
我问是因为,有 2 辆公共汽车,当一辆安静一段时间但另一辆在播放时,我会嗡嗡作响。
c# - [Flags] 属性的真正作用是什么?
申请的[Flags]
真正作用是什么?
我知道它会修改 的行为Enum.ToString
,但它还有其他作用吗?(例如不同的编译器或运行时行为等)
编辑:是的,我知道它记录了枚举旨在用作按位标志的事实,并且将其应用于位标志更合乎逻辑。不过,我问的是更多关于具体的行为变化,而不是一般的编程实践。
c# - C# 中是否有模式或方法来检查 (int 1,2,4,8,...) 选项是真还是假
我喜欢编写枚举或整数来将选项传递给我的方法。C# 中是否有模式或方法来检查 (int 1,2,4,8,...) 选项是真还是假。我认为通过二进制函数应该很容易实现。
编辑
我是否限制了可以像这样创建的选项数量?
c++ - 搜索位域模板(码本)
我在密码本中有一堆 8 位值(大约 200 个)。
我的程序将生成一个 8 位值以响应输入,我需要在码本中找到所有(甚至第一个是有帮助的)具有相同位集的匹配项。未设置的位无关紧要。
您能想出一种最佳方法来 a) 存储和 b) 搜索码本以查找所有匹配项吗?我有一个标准的线性搜索,但当然效率很低。
非常感谢...
阿克万