假设你定义了一个结构体如下:
struct Example {
unsigned int a : 3; // 3位
unsigned int b : 5; // 5位
unsigned int c : 8; // 8位
};
a 需要 3 位,b 需要 5 位,c 需要 8 位。
如果系统是小端序,变量通常从低地址向高地址填充,并且位段也按字节中的低位向高位依次排列。
假设 unsigned int 是 4 字节(32 位),这些变量会在 32 位的单元中依次排列,先填满一个单元后再用下一个。
假设在小端序系统中,a、b 和 c 的排列可能如下:
[code]| 32 bits (4 bytes) |
| cccccccc | bbbbb | aaa | ......|
[/code]
但这些布局具体是怎样的会依赖于编译器的实现和平台特性。
在使用之前可以先测试一下,通过串口打印出来观察一下,然后再进行详细的操作。 |