当在 C 中使用位字段时,我发现了与用于声明字段的实际类型相关的意想不到的差异。
我没有找到任何明确的解释。现在,问题已经确定,因此,尽管没有明确的回应,但这篇文章可能对面临同样问题的任何人都有用。不过,如果有人能给出正式的解释,那就太好了。
以下结构在内存中占用 2 个字节。
struct {
char field0 : 1; // 1 bit - bit 0
char field1 : 2; // 2 bits - bits 2 down to 1
char field2 ; // 8 bits - bits 15 down to 8
} reg0;
Run Code Online (Sandbox Code Playgroud)
这个占用内存4个字节,问题是为什么?
struct {
int field0 : 1; // 1 bit - bit 0
int field1 : 2; // 2 bits - bits 2 down to 1
char field2 ; // 8 bits - bits …Run Code Online (Sandbox Code Playgroud)