15得票7回答
C/C++比特字段和位运算符哪个更快、更好、更易于移植,用于单独提取位?

我需要以以下方式将一些比特打包到一个字节中:struct { char bit0: 1; char bit1: 1; } a; if( a.bit1 ) /* etc */ 或者:if( a & 0x2 ) /* etc */ 从源代码的清晰度来看,对我来...

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

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

38得票5回答
零长度位域的实际应用

我不完全确定C语言是否支持,但是C++允许长度为0的匿名位域。例如:struct X { int : 0; }; 问题一:您可以想到哪些实际用途? 问题二:您知道哪些真实世界的实际用途(如果有的话)? 编辑:在ice-crime的答案后进行了编辑。 编辑:好的,由于当前的回答...

16得票3回答
在C语言中,未命名的零长度位域是什么意思?

我在C标准草案(n1570)中看到了以下示例: $3.14第4段:声明为结构体:struct { char a; int b:5, c:11, :0, d:8; struct { int ee:8;...

43得票14回答
在Swift中声明和使用位字段枚举

如何在Swift中声明和使用位域?像这样声明枚举确实可行,但尝试将两个值进行按位或操作会导致编译错误:enum MyEnum: Int { case One = 0x01 case Two = 0x02 case Four = 0x04 ...

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

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

12得票2回答
初始化位域。

当你写代码时 struct { unsigned a:3, b:2; } x = {10, 11}; 在 ANSI C(C89)中,x.b 是否保证为 3?我已经阅读了标准多次,但似乎没有找到确切的情况。 例如,“无法由结果无符号整数类型表示的结果会对大于结果无符号整数类型所能...

23得票5回答
C语言 - 无法获取位域的地址

为什么不能取位域的地址? 我如何创建一个指向位域的指针? 以下是代码...struct bitfield { unsigned int a: 1; unsigned int b: 1; unsigned int c: 1; unsigned int d: 1...

17得票4回答
结构体位域的最大尺寸(C99,C++)

位字段的最大位宽是多少?struct i { long long i:127;} 我可以在结构体内定义一个位域,其位域大小可以高达128位、256位或更大吗?存在某些超宽向量类型,例如sse2(128位)、avx1/avx2(256位)和avx-512(用于下一代Xeon Phis的512位)...

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

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