问题标签 [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.

0 投票
1 回答
122 浏览

c++ - 是否有一种直观的方式来检查标志和状态?

找不到与我的案例相关的答案,所以我将尝试解释我的情况:

我有以下代码:

我的代码用于对文档进行词法分析,并且仅当我不在评论块中时才尝试执行操作。问题是,当我不在评论中时,上面的语句会返回完全相反的结果......

以下语句正确地完成了工作,但似乎相当违反直觉:

if (lexStatus & fInCommentBlock == fInCommentBlock)

所以问题是:

  • 为什么?为什么它的行为与我的预期完全相反?

由于运算符优先级if ((lexStatus & fInCommentBlock) != fInCommentBlock)修复了问题

  • 我正在接近正确的方式吗?
  • 有没有更好的办法?
  • 有没有办法确保每个标志都有不同的价值?

添加最后一个问题是因为出于某种原因lexStatus & fInCommentBlock,即使我没有在代码中的任何位置设置它们,也设置了一些位......

在此先感谢您的帮助!

0 投票
0 回答
470 浏览

php - PHP/MySQL 字段/列位标志:UNIQUE_KEY_FLAG 与 UNIQUE_FLAG

在 PHP 中,当从 MySQL 列/字段中提取位标志时,我看到(来自其他 SO 答案):

我想知道这两个位标志之间有什么区别?

为什么我找到的列表同时显示 NUM_FLAG 和 GROUP_FLAG = 32768?

我还想知道为什么我似乎无法在 php.net 或 mysql.com (Oracle) 上找到有关字段/列位标志的完整列表的任何信息。SO答案中的少数列表似乎错过了位标志#8,即“MULTIPLE_KEY_FLAG”(我确实找到了一个确实显示了这一点的SO答案),并且其他一些条目似乎也缺少,例如4096和8192。但是在找到这些位标志的完整列表时,我希望能够揭示每个位标志的描述性答案......我只能猜测我的互联网搜索能力一定会变老。

0 投票
4 回答
5207 浏览

c# - 从逗号分隔的列表或整数中解析枚举标志

我有一个包含多个标志的 XML,其中一些是无符号的 32 位整数,而另一些是无符号的 64 位整数。其中一些以逗号分隔的列表编写,而另一些则以十六进制样式编写。

看这个例子:

由于我不想编写解析每个枚举的方法,因此我决定使用通用方法。但是 Visual Studio 不允许我构建解决方案。这是我的方法:

我得到的错误信息是:

错误 1 ​​运算符“|=”不能应用于“T”和“T”类型的操作数

有没有办法做到这一点?

0 投票
2 回答
185 浏览

php - 将这些位掩码定义从典当语言转换为 PHP 的可能方法是什么?

好吧,澄清一下,pawn 是一种与 C++ 非常相似的语言。我正在编写一个需要位掩码权限(在 php 中)的管理控制面板,我实际上不知道我是否将权限正确转换(因为这是我从未做过的事情)到 PHP。我使用 define() 来定义权限。这是它最初的样子(典当):

现在这就是我在 PHP 中定义它的方式:

我比较了位标志,大多数时候它只识别EAdminFlags_All权限以及EAdminFlags_NoneEAdminFlags_BasicAdmin。所以我在 PHP 中定义它的方式可能存在问题。权限存储在数据库中,并保存为原始整数值,例如:51531777 然后将其加载到 PHP 中并进行比较,如下所示:

事先感谢您的帮助,我真的很感激。

0 投票
3 回答
177 浏览

c - 有效检查 Bitflag 不变量(可能的位旋转)

我有一个byte用来存储位标志的。我有 8 个标志(每个位一个),可以分为 2 个标志的 4 对,它们是互斥的。我按以下方式排列了位标志:

标志 A 不能设置,而标志 B 也已设置,反之亦然,因此标志 A 和 B 是互斥的。标志 A 和 B 都可以取消设置,但不能同时设置。旗标 C 和 D、旗标 E 和 F 以及旗标 G 和 H 的规则相同。

当前测试用例(在 C 中):

上面的check()方法目前通过了所有的测试用例。我想知道是否有一种更有效的方法来检查这个不变量是否正确,使用一些比特旋转黑客。我可能必须每秒多次检查这个不变量,所以效率很重要。如果新的安排允许一些原始安排没有的小玩意儿,我愿意改变旗帜的安排。

置换 EX:ABCDEFGH-->AHBGCFDE

0 投票
8 回答
4668 浏览

c - 确定字节中的哪个单个位被设置

我有一个byte我正在使用的位标志。我知道在任何给定时间都设置了一个且只有一个位。byte

前任:unsigned char b = 0x20; //(00100000) 6th most bit set

我目前使用以下循环来确定设置了哪个位:

如何最有效地确定设置位的位置?我可以在没有迭代的情况下做到这一点吗?

0 投票
5 回答
706 浏览

optimization - 确定字节中最显着设置位的位置

我有一个byte用来存储位标志的。我需要计算字节中最高有效位的位置。

示例字节: =>是最高有效位的位置001011016

紧凑的十六进制映射:

C中的测试用例:

我想简化我的check()功能以不涉及循环(或最好分支)。是否有一些小技巧或散列查找表解决方案来计算字节中最重要的设置位的位置?

0 投票
2 回答
532 浏览

c# - 位标志始终包含 0 值

所以我遇到了这段代码:

现在,从技术上讲,“NA”是无效的,如果用户不想选择任何选项,他们就不会选择任何选项,它将保存到可为空的 int。没有“无”选项。但是,任何时候用户选择选项 AC,NA 也总是会被添加。如果我改变NA = 1,那么OptionC = 8,一切正常。那部分是有道理的。但是,如果 NA 将始终包含在用户的选项列表中,NA = 0为什么?

编辑:

为了澄清一些事情,NA是独占的,但是如果我在哪里选择OptionB,那么当我查看选定的选项时,它会显示我选择了NA和OptionB。

0 投票
2 回答
2196 浏览

c# - 如何定义多个值映射到单个标签的枚举?

假设,为了这个例子,我试图解析一个文件,该文件指定记录中的两个任意字节代表一周中的哪一天,因此:

我可以定义一个枚举来映射到这个字段,因此:

但是我如何定义有效值ReservedForFutureUse呢?理想情况下,我想做类似的事情:

这个问题只会随着更复杂的领域而加剧;例如,假设在这种情况下,7 和 8 都映射到相同的错误情况或其他东西。如何在 C# 枚举中捕获这一要求?

0 投票
3 回答
2177 浏览

c - 创建具有大量标志的位标志变量或如何创建大位宽数字

假设我有一个枚举,其位标志选项大于标准数据类型中的位数:

由于几个原因,这是不可能的。枚举的最大大小为 128 位(在我的实验系统上的 C/gcc 中),单个变量的最大大小也为 128 位等。

在 C 中,您不能对数组执行按位运算,但在 C++ 中,我想您可以重载按位运算符来使用循环来完成这项工作。

除了手动记住哪些标志在哪里可以为大数工作之外,C 中还有其他方法吗?