ビットフィールドとは

びっとふぃーるど

C言語の構造体で、メンバを unsigned int x : 3; のように指定したビット数の欄として宣言するしくみ。小さな値を詰めて持てるので、フラグや設定値をまとめるのに使われる。符号なしの欄に入らない値を入れると、2のビット数乗で割った余りになる。欄をワードの上位と下位のどちらから並べるか、欄が境界をまたぐかどうかなどは処理系によって違ってよいので、周辺回路のレジスタや通信の形を表すときは、マスクとシフトで書く方法がよく使われる。

「ビットフィールド」は、2分野の2問の練習問題に出てきます(組込み・ファームウェア, C言語の基礎など)。

この用語の分野: C言語の基礎

ビットフィールドの練習問題に挑戦

C言語のビットフィールドを使った構造体で周辺回路のレジスタを表すとき、注意が必要な点として正しいものはどれか。

  1. Aビットフィールドを使うと、プログラムが必ず2倍速くなる
  2. Bビットフィールドのビットの並び順などはコンパイラによって違ってよいので、別のコンパイラでは意図と違うビットを操作することがある
  3. Cビットフィールドは、8ビット以上の値を表せない
答えと解説を見る

正解:B. ビットフィールドのビットの並び順などはコンパイラによって違ってよいので、別のコンパイラでは意図と違うビットを操作することがある

ビットフィールドは読みやすく書けますが、C言語の規格では、構造体の中でビットを上位から並べるか下位から並べるか、欄が境界をまたぐときの扱い、アクセスの幅などが処理系に任されています。そのため、あるコンパイラで正しく動いても、別のコンパイラやCPUでは違うビットを読み書きすることがあります。マイコンの会社が用意するヘッダは、マスクとシフトで書かれていることが多いです。

解説の中の「ビットフィールド」

「ビットフィールド」が出てくる問題(2問)

  1. C言語のビットフィールドを使った構造体で周辺回路のレジスタを表すとき、注意が必要な点として正しいものはどれか。
  2. 3ビットのビットフィールドに9を入れる上のコードを実行したときの出力として、正しいものはどれか。

C言語の基礎の参考書を探す PR

Amazonの検索結果へのリンクです。Amazonのアソシエイトとして、半導体教室は適格販売により収入を得ています。

関連する用語

構造体 マイコン(マイクロコントローラ) アライメントとパディング 関数ポインタ 共用体 整数拡張 ダングリングポインタ 動的メモリ確保 バッファオーバーフロー プリプロセッサ

用語集の一覧へ