问题标签 [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.
sql - 存储许多位——我应该使用多个列还是单个位域列?
我正在User
我的数据库中设计一个表。对于每个用户,我有大约 30 个选项,可以是“允许”或“禁止”。
我的问题是我应该将这些存储为 30bit
列,还是应该使用单个int
列来存储它们并解析应用程序中的每一位?
此外,我们的数据库是 SQL Server 2008 和 2005(取决于环境)
c++ - C++ 中的位域
我有以下自学代码:
我知道这unsigned int k:4
意味着 k 是 4 位宽,或最大值为 15,结果如下。
例如,filed1
可以从 0 到 7(包括),field2
从k
0 到 15。为什么会出现这样的结果?也许它应该全部为零?
c - 为什么我不能将位域声明为自动变量?
我想声明一个使用冒号指定大小的位域(我不记得语法叫什么了)。我想写这个:
但是 GCC 说这是一个语法错误(它认为我正在尝试编写一个嵌套函数)。我这样做没有问题:
然后将一个这样的结构放入堆栈
这让我相信它被语法而不是语义问题所阻止。
那么为什么第一个示例不起作用呢?我错过了什么?
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)
c++ - 如何使用 C++ 构造函数初始化位域?
首先,我不关心可移植性,可以放心地假设字节序不会改变。假设我读取了一个硬件寄存器值,我想将该寄存器值覆盖在位域上,以便我可以在不使用位掩码的情况下引用寄存器中的各个字段。
编辑:修复了 GMan 指出的问题,并调整了代码,以便未来的读者更清楚。
请参阅: Anders K. & Michael J 在下面的答案,以获得更雄辩的解决方案。
c - 冗余 __packed__ 属性
此代码适用于 Microchip 的 PIC32MX 微处理器。他们的编译器本质上是 GCC 3.4。
我倾向于使用 GCC 的__packed__
属性将位域打包到一个联合中,然后将它们检索为unsigned char
(即类型双关语)以通过 SPI 或 I2C 发送。这种行为都是由我的实现定义的,并且运行良好。我更喜欢这个而不是一百行左右的掩蔽和移位:)
我的问题是:__packed__
下面的代码中是否有多余的属性?乍一看,我认为工会高层成员可以免去,但我不太确定。或者我可以省略嵌套结构中的那些吗?
c++ - 为什么我的值用位字段除以 2
我在位域和字节序方面遇到了一些麻烦......我很困惑。
我需要解析从网络获取的一些数据,发送的是 lil endian(我使用 boost::asio)
你能解释一下吗
[输出]
00000000 00000001
00000010 00000000
c++ - 游戏地图对象属性的位域与多态性
这个优化问题在最后一天一直困扰着我。
在我的程序(一个简单的 roguelike 游戏)中,我使用按位标志来存储地图对象的属性,例如它们是否是实体的,或者它们是否被渲染。但是,我可以使用多态性来完成这件事以返回适当的值。
我的问题是,在链表循环中使用时,任何一种方式都比另一种方式快得多还是慢得多?另外,一种做法比另一种更好吗?
代码示例:
谢谢。
c++ - 关于结构和指针的问题
让我们考虑以下代码
这个片段
我在猜测后添加了一些有趣的代码特征,例如在这个地方之后
当我们写printf("%d\n",bitfields->x);
which prints 8 我明白使用指针和引用 i 的值将被授予 x 所以它打印 8 例如当我们写它时bitfiled->y
它写 0 所以我决定引入第二个元素变量 j 创建 bf 结构的新实例和引用 j 之后的语句 bit->y 应该写 9 因为据我了解它是订单定义但它给了我 0 为什么?请解释一下这段代码是如何工作的?我不会说英语,所以请原谅我的英语不好
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?