C ビットフィールド 新しいページはコチラ
提供: yonewiki
(→ビットフィールド) |
(→ビットフィールド) |
||
30行: | 30行: | ||
ビットフィールドには他にも制限があり、int型より大きいサイズのbit数の指定はできません。したがって、 | ビットフィールドには他にも制限があり、int型より大きいサイズのbit数の指定はできません。したがって、 | ||
+ | <syntaxhighlight lang="cpp"> | ||
unsigned int bf1_yflag :33; | unsigned int bf1_yflag :33; | ||
+ | </syntaxhighlight> | ||
としても、32までしか使えないため、指定を無視して32bitに切り詰められます。 | としても、32までしか使えないため、指定を無視して32bitに切り詰められます。 | ||
+ | |||
bit値がint型のしきりをまたぐような大きさでは確保できません。例えば | bit値がint型のしきりをまたぐような大きさでは確保できません。例えば | ||
+ | <syntaxhighlight lang="cpp"> | ||
unsigned int bf1_xflag :24; | unsigned int bf1_xflag :24; | ||
unsigned int bf1_yflag :24; | unsigned int bf1_yflag :24; | ||
unsigned int bf1_zflag :24; | unsigned int bf1_zflag :24; | ||
unsigned int bf1_aaflag :24; | unsigned int bf1_aaflag :24; | ||
+ | </syntaxhighlight> | ||
とすると、1変数あたりで32-24=8で8ビットずつがあまるので、4つあつまると1byte節約できるようにも感じますが、実際には、int型の大きさをまたいでbit値を確保できないために詰めることができず、節約にはなりません。 | とすると、1変数あたりで32-24=8で8ビットずつがあまるので、4つあつまると1byte節約できるようにも感じますが、実際には、int型の大きさをまたいでbit値を確保できないために詰めることができず、節約にはなりません。 |