wir*_*bel 19 c struct principles c99 bit-fields
我早就知道C中有位字段,偶尔我会用它们来定义密集的结构:
typedef struct Message_s {
unsigned int flag : 1;
unsigned int channel : 4;
unsigned int signal : 11;
} Message;
Run Code Online (Sandbox Code Playgroud)
当我阅读开源代码时,我经常会发现位掩码和位移操作,以便在手工滚动的位域中存储和检索这些信息.这是如此常见,我不认为作者不知道位字段语法,所以我想知道是否有理由通过位掩码滚动位字段并转移自己的操作而不是依赖编译器生成用于获取和设置此类位字段的代码.
chq*_*lie 15
为什么其他程序员使用手工编码的位操作而不是位域来将多个字段打包成一个字?
这个答案是基于意见的,因为这个问题非常开放:
许多程序员不知道位域的可用性或不确定它们的可移植性和精确的语义.有些人甚至不信任编译器生成正确代码的能力.他们更喜欢编写他们理解的显式代码.
正如Cornstalks评论的那样,这种态度植根于本文所解释的现实生活体验.
是否有理由避免使用位域结构?
bitfield-structs有一些限制:
scanf()由于不可寻址性,不可能读取(使用)和使用位字段上的指针.sizeof()操作者不能被施加于位字段中,由于sizeof()产生的结果以字节为单位,而不是在比特.所以你是否应该使用它们取决于.阅读更多内容为什么bit endianness是bitfields中的一个问题?
PS:何时在C中使用位域?
| 归档时间: |
|
| 查看次数: |
1987 次 |
| 最近记录: |