可能是重复问题:
如何解释结构体声明中的冒号,例如 :1、:7、:16 或 :32?
这是一个参考页面的 C 代码示例。
signed int _exponent:8;
在“8”和“:8”之前的冒号有什么意义?
可能是重复问题:
如何解释结构体声明中的冒号,例如 :1、:7、:16 或 :32?
这是一个参考页面的 C 代码示例。
signed int _exponent:8;
在“8”和“:8”之前的冒号有什么意义?
这是一个位域(bitfield)。它只在struct
定义中有效,意味着系统将只使用8位来表示您的整数。
这是一个位域(bitfield),结构体的一个不太常用的和误导人的特性。这应该足够让您查找需要了解如何处理其他人代码中的位域的信息。至于您自己的代码,永远不要使用位域。
编辑:根据Zack的要求,位域与执行自己的位运算相比具有显着的劣势,而且没有优势。以下是一些缺点:
对于单个比特标志,使用自己的位运算而不是位域是一个完全没有头脑的选择。对于需要打包的较大值,如果在各处都写出所有位运算太麻烦,可以编写一些简单的宏。
这是一个位域规范。
它意味着_exponent
只取signed int
中的8
位,而signed int
通常不止8
位。通常,位域与无符号类型一起使用。
如果写入_exponent
的内容超过8位,编译器会发出警告。