【发布时间】:2019-05-20 07:36:02
【问题描述】:
当有填充位时,我有两个关于位域的问题。
假设我有一个定义为的结构
struct T {
unsigned int x: 1;
unsigned int y: 1;
};
Struct T 只有两个实际使用的位。
问题 1:这两位是否总是底层 unsigned int 的最低有效位?还是依赖于平台?
问题 2:那些未使用的 30 位是否总是初始化为 0? C 标准对此有何评论?
【问题讨论】:
-
请只问一个问题。
-
虽然 C 和 C++ 标准可能说了类似的话,但仍可能存在差异,使得语义非常不同。
-
使用的位的位置是实现定义的(C11 §6.7.2.1 ¶11。未使用的位是不可访问的,并且不保证初始化为任何特定值。如果对您很重要,请不要使用位-fields。几乎没有关于位域的可移植性,除了它们存在并在给定平台上工作(但它们在其他平台上存在并且工作方式不同)。
-
郑重声明,这些不是语言律师的问题。当您必须在嵌入式平台上操作寄存器位时,这很重要。
标签: c struct bit-manipulation language-lawyer