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,你会看到你期望的结果.