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

sql - 存储许多位——我应该使用多个列还是单个位域列?

我正在User我的数据库中设计一个表。对于每个用户,我有大约 30 个选项,可以是“允许”或“禁止”。

我的问题是我应该将这些存储为 30bit列,还是应该使用单个int列来存储它们并解析应用程序中的每一位?

此外,我们的数据库是 SQL Server 2008 和 2005(取决于环境)

0 投票
3 回答
2905 浏览

c++ - C++ 中的位域

我有以下自学代码:

我知道这unsigned int k:4意味着 k 是 4 位宽,或最大值为 15,结果如下。

例如,filed1可以从 0 到 7(包括),field2k0 到 15。为什么会出现这样的结果?也许它应该全部为零?

0 投票
4 回答
938 浏览

c - 为什么我不能将位域声明为自动变量?

我想声明一个使用冒号指定大小的位域(我不记得语法叫什么了)。我想写这个:

但是 GCC 说这是一个语法错误(它认为我正在尝试编写一个嵌套函数)。我这样做没有问题:

然后将一个这样的结构放入堆栈

这让我相信它被语法而不是语义问题所阻止。

那么为什么第一个示例不起作用呢?我错过了什么?

0 投票
2 回答
1875 浏览

mysql - 在 MySQL 中,BIT 列是否适合存储 5、6 或 7 字节整数?

我有一张表,我想保持它的大小,其中一列可以被视为一个 5 字节的无符号整数。这是我不需要搜索的列。

MySQL 提供整数数据类型

  • TINYINT, 对于 1 字节整数
  • SMALLINT, 对于 2 字节整数
  • MEDIUMINT, 对于 3 字节整数
  • INT, 对于 4 字节整数
  • BIGINT, 对于 8 字节整数。

但它也提供, 用于 1 ≤ M ≤ 64。它(有效地)存储一个从 0 到 2 M-1BIT(M)的无符号整数。是否有理由避免使用列来存储 5 字节整数?(正如我所说,我不需要按此列搜索。因此,可以忽略与查询执行速度有关的任何困难。)BIT(40)

0 投票
4 回答
4184 浏览

c++ - 如何使用 C++ 构造函数初始化位域?

首先,我不关心可移植性,可以放心地假设字节序不会改变。假设我读取了一个硬件寄存器值,我想将该寄存器值覆盖在位域上,以便我可以在不使用位掩码的情况下引用寄存器中的各个字段。

编辑:修复了 GMan 指出的问题,并调整了代码,以便未来的读者更清楚。

请参阅: Anders K. & Michael J 在下面的答案,以获得更雄辩的解决方案。

0 投票
1 回答
1214 浏览

c - 冗余 __packed__ 属性

此代码适用于 Microchip 的 PIC32MX 微处理器。他们的编译器本质上是 GCC 3.4。

我倾向于使用 GCC 的__packed__属性将位域打包到一个联合中,然后将它们检索为unsigned char(即类型双关语)以通过 SPI 或 I2C 发送。这种行为都是由我的实现定义的,并且运行良好。我更喜欢这个而不是一百行左右的掩蔽和移位:)

我的问题是:__packed__下面的代码中是否有多余的属性?乍一看,我认为工会高层成员可以免去,但我不太确定。或者我可以省略嵌套结构中的那些吗?

0 投票
1 回答
167 浏览

c++ - 为什么我的值用位字段除以 2

我在位域和字节序方面遇到了一些麻烦......我很困惑。

我需要解析从网络获取的一些数据,发送的是 lil endian(我使用 boost::asio)

你能解释一下吗

[输出]

00000000 00000001

00000010 00000000

0 投票
1 回答
215 浏览

c++ - 游戏地图对象属性的位域与多态性

这个优化问题在最后一天一直困扰着我。

在我的程序(一个简单的 roguelike 游戏)中,我使用按位标志来存储地图对象的属性,例如它们是否是实体的,或者它们是否被渲染。但是,我可以使用多态性来完成这件事以返回适当的值。

我的问题是,在链表循环中使用时,任何一种方式都比另一种方式快得多还是慢得多?另外,一种做法比另一种更好吗?

代码示例:

谢谢。

0 投票
2 回答
151 浏览

c++ - 关于结构和指针的问题

让我们考虑以下代码

这个片段

我在猜测后添加了一些有趣的代码特征,例如在这个地方之后

当我们写printf("%d\n",bitfields->x);which prints 8 我明白使用指针和引用 i 的值将被授予 x 所以它打印 8 例如当我们写它时bitfiled->y它写 0 所以我决定引入第二个元素变量 j 创建 bf 结构的新实例和引用 j 之后的语句 bit->y 应该写 9 因为据我了解它是订单定义但它给了我 0 为什么?请解释一下这段代码是如何工作的?我不会说英语,所以请原谅我的英语不好

0 投票
5 回答
4009 浏览

c++ - 打包位域时 VC++ 在做什么?

为了澄清我的问题,让我们从一个示例程序开始:

输出为“8”,表示我要打包的 56 位(7 个字节)被打包成 8 个字节,貌似浪费了一个字节。好奇编译器如何将这些位放在内存中,我尝试将特定值写入&c,例如:

int main(int argc, char **argv)

可以预见的是,在使用 Visual Studio 2010 的 x86_64 上,会发生以下情况:

等等

暂时忘记可移植性,假设您关心一个 CPU、一个编译器和一个运行时环境。为什么VC++不能把这个结构打包成7个字节?这是一个字长的事情吗?MSDN 文档上说“成员的#pragma pack对齐方式将在 n [在我的情况下为 1] 的倍数或成员大小的倍数的边界上,以较小者为准。” 谁能告诉我为什么我的 sizeof 为 8 而不是 7?