【发布时间】:2013-08-15 08:31:20
【问题描述】:
我正在阅读 C 的教程(法语),在一段中他们谈到了位域,他们给出了以下示例,没有太多解释:
struct register {
unsigned int mask : 3;
signed int privilege : 6;
unsigned int : 6; /* not used */
unsigned int ov : 1;
};
这个定义在内存级别的结果是什么?
在示例中将结构命名为
register是否有任何教学理由(这让我想起了电子学)?为什么有人会声明像示例中“未使用”注释的成员?
这种结构在实践中有什么好处?
为什么位字段没有地址?这是否符合寄存器中的规范?
【问题讨论】:
-
它们在 PC 上不如在 MCU 上有用。
-
感谢您提供此信息。你能告诉我为什么吗?
-
通常您的 PC 上有很多内存。使用位标志的操作也比使用字节标志的操作慢。这就是为什么在 PC 上您通常使用字节(uint8_t、uint16_t、uint32_t 甚至 uint64_t)标志。但是CPU的内存很少。他们中的许多人也可以使用单个位。这就是为什么在 CPU 上你通常会做位标志。
标签: c struct bit-fields