问题标签 [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 投票
2 回答
1035 浏览

c# - c# flags 属性枚举位组合如何工作?

枚举的Flags 属性允许该枚举类型的变量通过位逻辑采用多个值。这就是为什么建议每个枚举成员都有一个 2 或 0 的幂的数值。

但是,C# 不会阻止您定义一个值为 3 的成员。

这就提出了一个问题 - C# 如何组合具有数值不是 0 或 2 的成员的标志?

例如,一个普通的标志枚举会产生类似的东西(取自上面的 MSDN 链接):

但是,如果我要向“MultiHue”枚举添加另一个成员,其数值为“3”,则会产生以下结果:

请注意如何用不同的成员表示不同的组合,例如:

4 是“绿色”,但也可以是“石灰,黑色”,
7 是“石灰,绿色”,而不是之前的“黑色,红色,绿色”
等。

我知道这是一种不好的做法,但我想知道编译器如何决定将哪些成员组合用于某个位组合?

0 投票
2 回答
104 浏览

c - -D 名称=定义和位运算符

我试图了解如何执行下一个计算。

例如,如果这是我的终端命令

为什么我得到5?

2 b 的意思是 2*b ?

~ 2 b 表示 2*b 然后 ~ ?

0 投票
1 回答
93 浏览

assembly - 8位的普通减法运算

这是我的代码:

我只是尝试实现简单的除法,但是当您阅读评论(;)时,我得到了不同且有趣的结果。

我的想法如下:
只要股息为正,subtractionLoop就继续减法。如果达到0,则转到零部分。否则,转到减号部分。

我的错误在哪里/在哪里?
跳跃似乎不对。

0 投票
1 回答
325 浏览

c - CreateFile - dwDesiredAccess

正如这里所说的微软文档 - CreateFileA 函数

dwDesiredAccess

对文件或设备的请求访问,可以概括为读、写、两者或都不为零)。

最常用的值是 GENERIC_READ、GENERIC_WRITE 或两者 (GENERIC_READ | GENERIC_WRITE)

当同时使用 READ 和 WRITE 权限时,为什么要写入 GENERIC_READ | GENERIC_WRITE而不是写入GENERIC_READ && GENERIC_WRITE|与按位或运算符有什么关系吗?如果是,为什么我们使用它而不是&&

0 投票
1 回答
45 浏览

math - 将错误状态代码中的字节标志转换为 int

我对位掩码、位标志和其他“位”的东西感到困惑。我有一个错误代码列表 - 比如[102, 104, 108, 80000000, 8000000, 10000000, 1000000, 0x0008000, ....]. 它的一部分写入系统日志,如位标志,fe“67108864”(其中一部分不是,并返回正常数字)。我需要匹配它们,但我找不到任何算法。我怎么能这样做?也许它仅用于“0x0008000”之类的代码?如果是真的如何定义这其中的哪一个?

问题更深。我不明白字节标志。我知道标志通常用于布尔状态,但这里是记录的状态代码。例如,102 是 (1100110)2。该数字的字节标志是 2+4+32+64 ...这是我将 int 转换为二进制形式的方式,它显然等于 102。所以我很困惑。

谢谢你的时间!

0 投票
1 回答
398 浏览

arrays - 位串和标志移位

我对按位和所有有趣的爵士乐都很陌生,所以不太了解它的一切。我有两个问题。

A)标志和位移问题

我最近遇到了类似于下面的东西

我可以看到 is 是一个 AND 运算符和一个左移位,但是我不确定标志的作用及其用途(据我所知,它是一个布尔值的集合以节省空间),当我通常遇到左移时,它是什么例如 10100101 << 3,这将是 00101000(我相信),但这里似乎并非如此。那么调用上述函数的具体条件是什么呢?

B)也是一个标志问题(由于它的性质与第一个问题有关)。

TCP 包含由字节 13 中的 1 位标志组成的数据包。字节 13 的位(我相信是位 1)是请求连接的 SYN 标志。要“请求连接”,假设您可以访问它,假设它存储在某种数组中并且通过 packetNO[13] 访问,那么您将如何准确地调用该位。会和下面类似吗?

上述检查是否已请求连接,通过将真实位移动到位置 2(位 1?)

请向我解释这些概念并提供示例以提供帮助,我不确定我是否正确。

0 投票
0 回答
88 浏览

javascript - 我可以为字节标志中的特定位表示 NULL 吗?

我有一个带有两位的简单字节标志,表示一个人是否被邀请参加在线面试。出席由一个表单中的两个 Radio 选择器表示,可以是 Yes、No 或 NULL。邀请可以为 NULL。

  1. 用户可以通过表单中的无线电控件更改出席位。它可以是 Yes、No 或 NULL。
  2. 用户无法切换 Invited 位。初始导入时设置为 1,否则为 NULL。
  3. Invited 位在初始导入应用程序时设置为 1。但是,参加位应该为 NULL,因为我们还不知道他们是否参加。

那是我的问题!!出席位自然是0,因为用户没有确认你是否出席。

不知道如何表示“初次导入时,出勤未确认”的状态

我可以在位索引 1 处表示“NULL”状态吗?我应该添加一个额外的位来表示未确认的状态吗?我应该更改我的字节标志以更好地代表正在发生的事情吗?

像这样的东西。我必须记得清除位索引 2。

0 投票
1 回答
1324 浏览

c - C - 将枚举用于位标志 - 警告:枚举类型与另一种类型混合

我将枚举常量作为位标志传递给期望枚举类型作为输入的函数,如下所示:

当我调用该函数时,我收到一个警告:

警告:#188-D:枚举类型与另一种类型混合

警告是因为LED_RED | LED_GREEN | LED_YELLOW被转换为整数而不是LedType.

我可以通过在枚举中添加 LED 组合来避免警告,LedType但这意味着我必须添加所有可能的组合......如果我向 中添加更多 LED 选项enum,它会变得非常混乱......

我可以使用数组作为函数的输入,但调用函数时需要更多代码,我更喜欢简单的函数调用来设置 LED。

我正在使用 Keil µVision IDE 对基于 ARM 的微控制器 (STM32) 进行编程。

我的问题

是否有一种简单的安全方法来避免此警告或另一种方法将所有 LED 封装在一个有意义的类型/对象中,以便我可以轻松地将它们传递给函数并在循环中处理它们?


完整的故事

我正在为连接到多个 LED 的基于 ARM 的 MCU 编写程序。在程序的许多地方,我们将打开/关闭、切换和闪烁 LED 的不同组合。为了使这个简洁明了,我想编写几个函数,将 LED 的任意组合作为输入,并对所有 LED 执行相同的操作。

我用一个 LED 的硬件配置创建了一个struct名称,并创建了一个包含每个 LED 配置LedConfig的数组:LedConfig

现在,我想要一种简单的方法将几个 LED 传递给一个函数并循环处理它们。

我为每个 LED 创建了一些位标志:

定义了一个函数:

现在我可以通过按位或运算将 LED 传递给函数:

这工作正常,但......

我更喜欢使用enumLED 标志而不是定义,以便将主题封装在一个有意义的类型/对象中。

我用枚举替换了定义:

并修改setOnLed函数输入以获取枚举类型:

当我用几个 LED 调用函数时:

我收到警告:

警告:#188-D:枚举类型与另一种类型混合

注意uint32_t来自stdint.h并且是一个无符号的 32 位整数。

0 投票
1 回答
176 浏览

c# - 检查一组位标志是否包括至少一个其他位标志的标志

我正在编写一个事件系统,其中每个侦听器都侦听一个、多个或所有通道(GameEventChannel 枚举),并且只能为一个、多个或所有通道(GameEventChannels)引发事件。我现在拥有的是。

该事件被另一个类调用,该类在其上调用Invoke(GameEventChannel channel)。在 Invoke 函数中,我遍历了该事件的所有侦听器,并希望确定它应该调用哪些侦听器

我需要编写函数IsListeningToChannel() ,该函数需要确定侦听器是否正在侦听事件要调用的 GameEventChannel。

例如

Listener1 正在收听"GameEventChannel.Two | GameEventChannel.Eight"

我如何检查是否应该调用 Listener1,因为他在 GameEventChannel.Two 上侦听 Event 想要调用的。

所有代码

编辑 1:将枚举的每次出现都更改为正确的名称编辑 2:添加了枚举的完整代码(现在包括属性)

0 投票
1 回答
172 浏览

c++ - 如何使用 6502 的相应枚举存储处理器状态标志的值

作为我论文的一部分,我正在使用 C++ 开发 6502 仿真器。它有 6 个寄存器,其中大多数只保存值,但有一个特殊的 - 处理器状态。它是 8 位宽,每一位代表一个不同的标志。对我来说最好的选择似乎是让它 std::bitset<8> 并创建一个相应的枚举类来将其值映射到实际位,如下所示:

现在,如果我想引用以下三个之一:PS 的大小、标志号或位集本身,我有:

每个调用都以非常不同的方式访问该值。我想让它更一致,例如

您对如何实现这种(或类似的)一致性而不在代码中创建一些疯狂或丑陋的结构有什么好的想法吗?