#include <cstdio>
using namespace std;
union myUnion {
int var1; // 32 bits
long int var2; // 64 bits
char var3; // 8 bits
}; // union size is 64 bits (size of largest member)
int main()
{
myUnion a;
a.var1 = 10;
printf("a is %ld bits and has value %d\n",sizeof(a)*8,a.var1); // ...has value 10
a.var2 = 123456789;
printf("a is %ld bits and has value %ld\n",sizeof(a)*8,a.var2); // ...has value 123456789
a.var3 = 'y';
printf("a is %ld bits and has value %c\n",sizeof(a)*8,a.var3); // ...has value y
printf("a is %ld bits and has value %ld\n",sizeof(a)*8,a.var2); //... has value 123456789, why???
return 0;
}
I2luY2x1ZGUgPGNzdGRpbz4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnVuaW9uIG15VW5pb24gewogICAgaW50IHZhcjE7IC8vIDMyIGJpdHMKICAgIGxvbmcgaW50IHZhcjI7IC8vIDY0IGJpdHMKICAgIGNoYXIgdmFyMzsgLy8gOCBiaXRzCn07IC8vIHVuaW9uIHNpemUgaXMgNjQgYml0cyAoc2l6ZSBvZiBsYXJnZXN0IG1lbWJlcikKCmludCBtYWluKCkKewogICAgbXlVbmlvbiBhOwogICAgYS52YXIxID0gMTA7CiAgICBwcmludGYoImEgaXMgJWxkIGJpdHMgYW5kIGhhcyB2YWx1ZSAlZFxuIixzaXplb2YoYSkqOCxhLnZhcjEpOyAvLyAuLi5oYXMgdmFsdWUgMTAKICAgIGEudmFyMiA9IDEyMzQ1Njc4OTsKICAgIHByaW50ZigiYSBpcyAlbGQgYml0cyBhbmQgaGFzIHZhbHVlICVsZFxuIixzaXplb2YoYSkqOCxhLnZhcjIpOyAvLyAuLi5oYXMgdmFsdWUgMTIzNDU2Nzg5CiAgICBhLnZhcjMgPSAneSc7CiAgICBwcmludGYoImEgaXMgJWxkIGJpdHMgYW5kIGhhcyB2YWx1ZSAlY1xuIixzaXplb2YoYSkqOCxhLnZhcjMpOyAvLyAuLi5oYXMgdmFsdWUgeQogICAgcHJpbnRmKCJhIGlzICVsZCBiaXRzIGFuZCBoYXMgdmFsdWUgJWxkXG4iLHNpemVvZihhKSo4LGEudmFyMik7IC8vLi4uIGhhcyB2YWx1ZSAxMjM0NTY3ODksIHdoeT8/PwogICAgcmV0dXJuIDA7Cn0=