问题标签 [bit-fields]

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 投票
4 回答
4937 浏览

c - 尝试定义 1,024 位(128 字节)位字段时出错

我想定义一个大的位域,以便快速监控非常大的元素结构的状态。这是我到目前为止所拥有的:

当我尝试编译它时,我收到错误消息,“错误:位域 `<anonymous>' has invalid type”

位域只能用于某些类型吗?我认为如果我定义了一个足够大的变量,那么可以定义我的应用程序所需的大量位域,因为位域必须不大于用于定义它的类型。

任何想法或建议将不胜感激。

0 投票
3 回答
7219 浏览

c++ - 结构声明中的冒号是什么意思,例如:1、:7、:16 或:32?

以下 C++ 代码是什么意思?

我猜它创建了两个字符 a 和 b,它们都应该是一个字节长,但我不知道“:1”和“:7”部分是做什么的。

0 投票
8 回答
3171 浏览

c# - 返回多个枚举值的最佳方法是什么?(Java 和 C#)

删除了更多原始内容以使问题更易于参考:

所以我有一个House类有一个方法House.buy(Person p),导致人买房子。我想知道这个人是否有可能买房子,所以我也有一个方法House.tryBuy(Player p),如果这个人可以买房子,我就会返回。我有一个枚举BuyState值,如OK,NotEnoughMoneyAlreadyOwned. 有几个不同的条件需要满足,客户想知道哪个失败了。但是如果多个条件都失败了怎么办?我可以有一个层次结构,比如如果 House 已经拥有并且 Person 没有足够的钱,则 return BuyStates.AlreadyOwned。但这只能让我告诉客户一件事。

我可以有 N 个单独的条件和一个具有 N*N 值的枚举,ConditionA_AND_ConditionB_ANDConditionC但是由于几个原因,这根本没有意义。我知道有位域,每个条件都有一个位域,但它们看起来太低级了,实现起来很烦人,而且不可扩展。所以我需要一种从枚举中返回值列表的方法,那么这样的类怎么样:

这是“最好”的设计吗?

(保持这个关于 java 和 C# 的问题以保持答案有效)

0 投票
4 回答
7604 浏览

c++ - C ++ bool数组作为位域?

假设我需要在一个结构中存储 8 个布尔值,但我只想一起使用 1 个字节,那么我可以这样做:

有了这个我可以做类似的事情

到目前为止这是正确的吗?(我实际上不知道,我以前从未使用过位域)

好的 - 但是是否也可以创建一个由 8 个布尔值组成的静态数组,这样它们将只使用 8 位,但我仍然可以通过索引来寻址它们?

就像是

也许?(有了这个,我得到一个错误 C2033)

谢谢您的帮助!

0 投票
3 回答
13069 浏览

c - 位移、屏蔽或位域结构?

我是使用位的新手。我正在尝试使用现有协议,它可以发送三种不同类型的消息。

类型 1 是 16 位结构:

前两位(类型,在我上面的结构中)总是 1 0 。第三位highlow决定信号是开还是关,sig1 + sig2共同定义了信号的12位索引。这个索引被一个 0 分割成两个字节,0 总是在第 7 位。

类型 2 是 32 位结构。它有一个 2 位类型、一个 10 位索引和一个 16 位值,在 27、23、15 和 7 位置上散布着 0。位域结构表示形式如下所示:

sig1 和 sig2 一起构成 10 位索引。val1 + val2 + val3 一起形成 10 位索引处信号的 16 位值。

如果我了解如何使用前两个结构,我想我可以弄清楚第三个。

我的问题是,有没有办法分配一个值并让程序计算出需要进入 val1、val2 和 val3 的位?

我已经阅读了有关位移位、位域结构和用 0 填充的内容。该结构似乎是要走的路,但我不确定如何实现它。我所见过的位打包示例中没有一个具有按照这些方式拆分的值。最终,我希望能够创建一个模拟结构,分配一个索引(i = 252)和一个值(v = 32768)并完成它。

如果有人可以建议适当的方法或提供指向类似示例的链接,我将不胜感激。如果重要,这段代码将被合并到一个更大的 Objective-C 应用程序中。

谢谢。

布拉德

0 投票
9 回答
3009 浏览

c++ - 强制将位字段读取为 32 位

我正在尝试通过 PCI 总线对 VME 桥芯片(Tundra Universe II)执行小于 32 位的读取,然后该芯片将进入 VME 总线并被目标拾取。

目标 VME 应用程序仅接受 D32(32 位的数据宽度读取)并且将忽略其他任何内容。

如果我使用映射到 VME 窗口的位域结构(nmap'd 到主内存中),我可以读取 >24 位的位域,但任何更少的都失败。IE :-

这表明结构工作被读取为 32 位,但是通过失败结构的读取例如reg->fail.a被分解为 X 位读取。(X 可能是 16 还是 8?)

所以问题是:
a)这在哪里缩小?编译器?操作系统?还是 Tundra 芯片?
b) 执行的读取操作的实际大小是多少?

我基本上想排除除芯片之外的所有内容。这方面的文档在网上,但如果可以证明通过 PCI 总线请求的数据宽度是 32 位,那么问题可以归咎于 Tundra 芯片!

编辑:-
具体示例,代码为:-

所以现在我把它改成了这样:-

和基本的主要结构:-

所以我仍然需要更改我所有的基线代码

我怎么知道第二次阅读是否真的不会像我的原始代码那样再次进行真正的阅读?(而不是通过联合使用已经读取的位!)

0 投票
6 回答
2897 浏览

c - 如何从字节可寻址数组中解析出 n 位元素

我有一个只能以 8 位字节寻址的数据流,我想将其解析为 6 位元素并将其存储到一个数组中。有没有最知名的方法可以做到这一点?

进入

像这样的数组

(可以有零填充,只需要以这种方式寻址)

并且数据是一个 8 位数组,也是 6 位的倍数,并不是真的无穷无尽

0 投票
4 回答
550 浏览

python - 这种计算并集和交集的编程方法的正式名称

当我想同时计算两个集合(存储为列表)的并集、交集和差异时,我 [肯定会] 发明了这个 [轮子]。初始代码(不是最严格的):

然后我意识到我应该使用 00, 01, 10 和 11 而不是 -1, 1, 0, ... 所以,位置 n 的位表示集合 n 中的成员。

这可以使用 32 位 int 推广到最多 32 个集合,或者使用位数组或字符串推广到任意数量的集合。因此,您预先计算该字典一次,然后使用非常快速的 O(n) 查询来提取感兴趣的元素。例如,全 1 表示所有集合的交集。全 0 是一个特殊的 - 不会发生。

无论如何,这不是自吹自擂。这肯定是以前发明的并且有一个名字。这叫什么?这种方法是否在某处的数据库中使用?

0 投票
4 回答
1501 浏览

c++ - 解析位字段参数,如何“丢弃”无符号长字节中的位?

首先,我想知道这是否可能:假设我有一个 unsigned long ,其中包含一些 abritrary unsigned short ,它可能在数字中,也可能不在数字中。例如:

其他2个字段可以假设为0吗?OR 是正确的操作吗?之后,假设我将 bitfld 作为参数传递:

我想我必须轮询位域的前 16 位并检查它们,然后递归地轮询它们,验证它们并在它们大于 0 时存储它们。但我不确定如何做到这一点,位移只会移位左或右,因此,它只除或乘对吗?


很抱歉撞到了。感谢大家的回答,但我最终使用了一种更简单、更有效的方法,一种内部结构。你看,我可以用一个字符串轻松地做到这一点,但我的目的是对代码的用户透明,可以这么说很容易编程。我创建了一个内部结构来保存我的值,然后创建一个公共方法来创建和返回这种结构,因此它易于使用且解析速度更快(尽管它具有在堆栈中分配一个(虽然很小)结构的开销,它位域解决方案没有,但唉)。

所以谢谢大家的回答。

0 投票
5 回答
1456 浏览

c - 关于 C 位域的问题

  • 位域是 C 概念还是 C++?

  • 它只能在结构中使用吗?我们可以在哪些其他地方使用它们?

  • AFAIK,位域是特殊的结构变量,仅占用指定编号的内存。位。它在节省内存方面很有用。我对么?

我编写了一个小程序来了解位域的用法 - 但是,我认为它没有按预期工作。我希望以下结构的大小为 1+4+2 = 7 字节(考虑到 unsigned int 在我的机器上的大小为 4 字节),但令我惊讶的是它原来是 12 字节(4+4+4 )。谁能告诉我为什么?

输出: