union
{ int i;
bool b;
} x;
x.i = 20000;
x.b = true;
cout << x.i;
Run Code Online (Sandbox Code Playgroud)
打印出19969.为什么不打印出20000?
dan*_*ben 31
A union
不是struct
.在a中union
,所有数据占用相同的空间,并且可以通过其字段名称将其视为不同的类型.分配true
给时x.b
,您将覆盖低位20000
.
进一步来说:
二进制20000:100111000100000
19969二进制:100111000000001
这里发生的是你将一个字节的值1(00000001)放在200000的8个低位中.
如果你使用a struct
而不是a union
,你将有a int
和a的空间bool
,而不仅仅是a int
,你会看到你期望的结果.