11得票2回答
无符号位域的类型:int或unsigned int。

C99标准的6.3.1.1节包含以下内容: 以下内容可以在表达式中使用,无论何时都可以使用int或unsigned int: [...]类型为_Bool、int、signed int或unsigned int的位域。 如果int可以表示原始类型的所有值,则将值转换为...

7得票4回答
在位域(Bit Fields)的情况下,使用无符号字符型(unsigned char)还是无符号整型(unsigned int)更好?为什么?

我想了解以下结构声明。哪一个更适合用于内存分配,为什么?在unsigned char和unsigned int的情况下,关于填充有什么需要注意的吗? struct data{ unsigned char a:3; unsigned char b:4; }; 并且 struct d...

32得票4回答
C语言中变量名后面的冒号

可能是重复问题: 如何解释结构体声明中的冒号,例如 :1、:7、:16 或 :32? 这是一个参考页面的 C 代码示例。 signed int _exponent:8; 在“8”和“:8”之前的冒号有什么意义?

13得票2回答
Go语言:位域和位压缩

C语言的位域提供了一种相当方便的方法,在结构体内部定义任意宽度的字段(暂且不管可移植性问题)。例如,下面是一个简单的结构体,其中包含一些字段和一个'flag':#pragma pack(push,1) struct my_chunk{ unsigned short fieldA: 1...

15得票10回答
ANSI C是否支持有符号/无符号位域?

将位域标记为有符号或无符号是否有意义?

7得票3回答
如何处理比64位更长的位域?

问题已经说得很清楚了。 如果我有一个96位的字段: uint32_t flags[3]; //(thanks @jalf!) 如果我的子字段可能跨越32位边界(例如,从第29位到第35位运行的字段),那么我应该如何最好地访问它? 我需要尽可能快地访问它们,因此我不想按32位数组元素进...

8得票5回答
当VC++打包位字段时,它在做什么?

为了澄清我的问题,让我们从一个示例程序开始: #include <stdio.h> #pragma pack(push,1) struct cc { unsigned int a : 3; unsigned int b : 16; unsi...

148得票21回答
使用-1将所有位设置为true是否安全?

我在C和C++中经常看到这种模式。unsigned int flags = -1; // all bits are true 这是实现此目的的好方法吗?还是使用0xffffffff或~0更好?

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

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

33得票4回答
在位字段中使用枚举是否安全?

假设我有以下结构体:typedef struct my_struct{ unsigned long a; unsigned long b; char* c; unsigned int d1 :1...