22得票4回答
避免使用位域结构成员有哪些原因?

我早就知道在C语言中有位域(bit-fields)这一概念,并且有时候我会使用它们来定义紧密排列的结构体: typedef struct Message_s { unsigned int flag : 1; unsigned int channel : 4; u...

20得票2回答
在现代Java 8 API中,使用位域而不是EnumSet的理由

EnumSet自Java 5引入枚举enum以来便存在,旨在替代位字段的使用案例:速度和效率与位字段(除了不是原始类型)相当,并且具备类型安全性。另一方面,最近并且多年来备受期待的Java API—流式API—毫不掩饰地为Spliterator的characterist...

20得票4回答
位域中的溢出问题

我可以相信C编译器每次访问位字段时都会执行模2 ^ n操作吗?还是有任何编译器/优化,像下面的代码一样不会输出Overflow?struct { uint8_t foo:2; } G; G.foo = 3; G.foo++; if(G.foo == 0) { printf("Ove...

20得票7回答
位域的类型是什么?

我找不到C标准中规定这一点的地方。例如,在struct { signed int x:1; } foo; foo.x 的类型是 lvalue 的 int 吗?还是其它什么类型?似乎将其定义为 int 的 lvalue 不合适,因为你不能在其中存储任何 int 类型的值,只能存储 0 或 -1。...

20得票3回答
使用位域和联合体是否有效?

我使用了类似这样的结构体和位域:struct { unsigned int is_static: 1; unsigned int is_extern: 1; unsigned int is_auto: 1; } flags; 现在我想知道是否可以用un...

19得票5回答
Bit field vs Bitset

我想在一个类似数组的数据结构中存储位(bit)。因此,我可以采用以下两种方法之一: 方法一(AN 1)struct BIT { int data : 1 }; int main() { BIT a[100]; return 0; } 第二种方法 (AN2)int main(...

19得票6回答
位域成员的大小是多少?

有没有人知道如何提取位域成员的大小?下面的代码自然地给出了一个整数的大小,但是我该如何找出mybits.one中有多少位或字节?我已经尝试过sizeof(test.one),但显然行不通。我意识到这是对位的度量:#include <iostream> using namespac...

18得票4回答
为位字段(标志枚举)添加值的扩展方法

不要这样做来向标志枚举变量添加值:MyFlags flags = MyFlags.Pepsi; flags = flags | MyFlags.Coke; 我想创建一个扩展方法来实现这个功能:MyFlags flags = MyFlags.Pepsi; flags.Add(MyFlags.Co...

18得票5回答
微软可以在一个比特中存储三值字段吗?

我完全不了解SQL/数据库,但我正在与一位做大量数据库工作的朋友聊天,关于一些数据库使用“布尔”字段的方式,该字段除了真和假之外还可以取值为NULL。 关于这一点,他发表了这样的评论:“值得称赞的是,微软从来没有将那种字段称为布尔,他们只称其为位(bit)。而且它是一个真正的位(bit) -...

17得票2回答
位域和序列点

如果将f0和f1打包进同一个字节的实现方式,那么下面的程序是否被定义了呢?struct S0 { unsigned f0:4; signed f1:4; } l_62; int main (void) { (l_62.f0 = 0) + (l_62....