次のコードでは
#include <iostream>
using namespace std;
struct field
{
unsigned first : 5;
unsigned second : 9;
};
int main()
{
union
{
field word;
int i;
};
i = 0;
cout<<"First is : "<<word.first<<" Second is : "<<word.second<<" I is "<<i<<"\n";
word.first = 2;
cout<<"First is : "<<word.first<<" Second is : "<<word.second<<" I is "<<i<<"\n";
return 0;
}
word.first = 2 を初期化すると、予想どおり、単語の 5 ビットが更新され、目的の出力が得られます。少し紛らわしいのは「i」の出力です。word.first = 2 の場合、i の出力は 2 になり、word.second = 2 の場合、i の出力は 64 になります。これらは同じメモリ ブロックを共有するため、後者の場合の (i の) 出力は2?