符号付き 5 ビット整数 (int age : 5;ビットフィールドで定義) は -16 .. +15 の範囲の値を保持できますが、20 はこの範囲外です。
unsigned int6 ビット以上を使用または使用してください。実際、年齢によっては、符号なし 7 ビットまたは符号付き 8 ビットが必要になる場合があります。
ビットフィールドは、言語の興味深い部分です。ここのように年齢に合わせて使用するメリットがあるかどうかは疑問です. char何らかの値を使用することもできますが、使用しても構造内のスペースが無駄になることはありませんint(32 ビット マシンでは 8 バイト、64 ビット マシンではおそらく 16 バイトのサイズになります)。 .
ISO/IEC 9899:2011 の §6.7.2.1 Struct and union specifiersの脚注 125 には、次のように記載されています。
125)上記の 6.7.2 で指定されているように、使用される実際の型指定子がintまたは として定義された typedef-nameintである場合、ビットフィールドが符号付きか符号なしかは実装定義です。
intコンパイラのプレーン ビット フィールドが署名されているという警告メッセージが表示されます。signed intタイプを にするかにするかを明示する必要がありますunsigned int。