• ベストアンサー

C言語のビットフィールドで分からないところがありま

union UNION { struct { unsigned int a :(32-8-5); // この部分 unsigned int b :8; unsigned int c :5; }BIT; }; 上記の「この部分」と書いてある行の意味を教えてください よろしくお願いします

質問者が選んだベストアンサー

  • ベストアンサー
  • KEIS050162
  • ベストアンサー率47% (890/1879)
回答No.1

32bit領域に、後ろのb、(8Bit)、c(5bit)を引いた残りのフィールド(19bit)をaに割り当てている、のだと思います。 0 ~ 18 | 19 ~ 26 | 27 ~ 31   a            b         c という風に割り当てた形です。 実際には、共用体(UNION)の宣言になっているので、構造体 BIT以外の定義と共用して、使われる例が多いかとと思います。 例えば、 union UNION {   int abc;   struct   {   unsigned int a :(32-8-5); // この部分   unsigned int b :8;   unsigned int c :5;   }BIT; }; と定義されれば、abcは32bitの整数として、参照、代入され、 それを構造体BITのメンバー、a,b,cで参照すれば、abcの0~18は、aで、19~26は、b、27~31は、cで参照が出来る、といういう様な使い方です。 ご参考に。

KtoTtoA
質問者

お礼

なるほど! この様な使い方もあるのですね。 参考になりました。 ありがとうございました。