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

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

27得票2回答
在C语言结构体中使用压缩位域 - GCC

我正在Linux上使用C语言中的结构体。我开始使用位域和“packed”属性,但我遇到了奇怪的行为:struct __attribute__((packed)) { int a:12; int b:32; int c:4; } t1; struct __attribu...

13得票2回答
枚举位域和聚合初始化

以下代码被clang 6.0.0接受,但被gcc 8.2拒绝enum class E { Good, Bad, }; struct S { E e : 2; int dummy; }; S f() { return {E::Good, 100}; } 实时 godbolt ...

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

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

10得票7回答
具有位字段的结构体的内存布局

我将翻译如下: 我有一个C结构体:(表示IP数据包) struct ip_dgram { unsigned int ver : 4; unsigned int hlen : 4; unsigned int stype : 8; unsigned 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”之前的冒号有什么意义?

11得票1回答
位域,为什么要实现特定?

C/C++ 位域在硬件驱动程序和二进制网络传输中似乎有很多应用,但它们并不常用并且通常受到约束,因为实际的二进制布局是特定于实现的,正如C99标准6.7.2.1/10-"结构和联合说明符"中所示: 一个实现可以分配任何足够大以容纳位域的寻址存储单元。如果剩余空间足够,紧随结构中另一个位...

13得票6回答
如何将一个8位字节中的四个2位二进制字段相加?

我有四个2位二进制位字段存储在单个字节中。每个二进制位字段可以表示0、1、2或3。例如,以下是前3个二进制位为零时可能的4个值:00 00 00 00 = 0 0 0 0 00 00 00 01 = 0 0 0 1 00 00 00 10 = 0 0 0 2 00 00 00 11 = 0 0...

7得票2回答
结构体末尾的未命名位域有什么用?

我正在学习C语言。在《C Primer Plus》这本书中,我看到了一个位域的例子,如下: struct box_props { bool opaque : 1; unsigned int fill_color : 3; unsigne...