ZHCUAQ1G June 2015 – August 2025
位字段是唯一打包在字节中的对象。也就是说,两个位字段可存储在同一字节中。在 C语言中,位字段的大小可以从 1 位到 64 位不等,在 C++ 语言中则可以更大。
对于大端模式,位字段按定义的顺序从最高有效位 (MSB) 到最低有效位 (LSB) 打包到寄存器中。位字段按从最高有效字节 (MSbyte) 到最低有效字节 (LSbyte) 的顺序打包到内存中。对于小端模式,位字段按照定义的顺序从 LSB 到 MSB 打包到寄存器中,并按照从 LSbyte 到 MSbyte 的顺序打包到内存中。
位字段的大小、对齐方式和类型遵循以下规则:
struct st
{
int a:4
};此结构使用了 4 个字节并在 4 个字节处对齐。
struct st
{
char a:4;
int :22;
};此结构使用了 4 个字节并在 4 字节边界处对齐。
表 8-2 使用以下位字段定义说明位字段打包:
struct{
int A:7
int B:10
int C:3
int D:2
int E:9
}x;A0 表示字段 A 的最低有效位;A1 表示下一个最低有效位,以此类推。同样,位字段在内存中的存储是通过逐字传输而不是逐位传输完成的。
| 大端寄存器 | |||||||||||||||||||||||||||||||
| MS | LS | ||||||||||||||||||||||||||||||||||
| A | A | A | A | A | A | A | B | B | B | B | B | B | B | B | B | B | C | C | C | D | D | E | E | E | E | E | E | E | E | E | X | ||||
| 6 | 5 | 4 | 3 | 2 | 1 | 0 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 2 | 1 | 0 | 1 | 0 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | X | ||||
| 31 | 0 | ||||||||||||||||||||||||||||||||||
| 大端内存 | |||||||||||||||||||||||||||||||
| 字节 0 | 字节 1 | 字节 2 | 字节 3 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| A | A | A | A | A | A | A | B | B | B | B | B | B | B | B | B | B | C | C | C | D | D | E | E | E | E | E | E | E | E | E | X | ||||||||||||||||||||||||||||
| 6 | 5 | 4 | 3 | 2 | 1 | 0 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 2 | 1 | 0 | 1 | 0 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | X | ||||||||||||||||||||||||||||
| 小端寄存器 | |||||||||||||||||||||||||||||||
| MS | LS | ||||||||||||||||||||||||||||||||||
| X | E | E | E | E | E | E | E | E | E | D | D | C | C | C | B | B | B | B | B | B | B | B | B | B | A | A | A | A | A | A | A | ||||
| X | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 1 | 0 | 2 | 1 | 0 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ||||
| 31 | 0 | ||||||||||||||||||||||||||||||||||
| 小端内存 | |||||||||||||||||||||||||||||||
| 字节 0 | 字节 1 | 字节 2 | 字节 3 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| B | A | A | A | A | A | A | A | B | B | B | B | B | B | B | B | E | E | D | D | C | C | C | B | X | E | E | E | E | E | E | E | ||||||||||||||||||||||||||||
| 0 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 1 | 0 | 1 | 0 | 2 | 1 | 0 | 9 | X | 8 | 7 | 6 | 5 | 4 | 3 | 2 | ||||||||||||||||||||||||||||
| 说明:X = 未使用,MS = 最高有效,LS = 最低有效 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||