为什么我的工会没有显示正确的值?

Joe*_*Joe 13 c unions

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