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
,您将有空间容纳int
和bool
,而不仅仅是int
,并且您将看到预期的结果。