union
{ int i;
  bool b;
} x;

x.i = 20000;
x.b = true;
cout << x.i;

它打印出19969。为什么不打印20000份?

最佳答案

aunion不是astruct。在union中,所有数据都占用相同的空间,并且可以通过其字段名将其视为不同的类型。将true指定给x.b时,将覆盖20000的低位。
更具体地说:
20000二进制:100111000100000
19969二进制:100111000000001
这里发生的是,在200000的8个低阶位中放入一个1字节值(00000001)。
如果您使用struct而不是union,您将有空间容纳intbool,而不仅仅是int,并且您将看到预期的结果。

10-06 03:09