结构体位域中的高低位问题

测试代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>

union Test {
unsigned char ch;
struct {
uint8_t a: 1;
uint8_t b: 3;
uint8_t c: 2;
uint8_t d: 2;
};

};

int main(int argc, const char * argv[]) {
Test test;
test.a = 1;
test.b = 0;
test.c = 0;
test.d = 0b11;

std::cout << test.ch << std::endl;
return 0;
}

在 macOS 上断点查看内存如下

结论:

可以看到,定义在前的位域,在字节的低位。
位域在内存中存储的顺序刚好与定义的先后相反。


结构体位域中的高低位问题
https://yxibng.github.io/2023/06/09/c++/2023-06-09-位域 高低位/
作者
yxibng
发布于
2023年6月9日
许可协议