フラグ (コンピュータ)

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索

フラグとは、コンピュータにおいて、処理結果を真(True)/偽(False)いずれかの値で保持するレジスタまたは変数のこと。条件が合っていれば真(True)、否であれば偽(False)である。真の場合を「フラグが立っている」、偽の場合を「フラグが落ちている」と言い、また真にすることを「フラグを立てる」、偽にすることを「フラグを倒す」(あるいはフラグを降ろす、落とすとも)と言う。

フラグの実現方法[編集]

ハードウェア[編集]

ステータスレジスタと呼ばれる各ビットがそれぞれ一つ前の処理での状態を表すようなレジスタが用意されている。これは主に条件分岐に用いられる。

例えば8ビットマイクロプロセッサーであるZ80は以下のようなフラグを持つ。

  • Sフラグ: 計算結果の正負
  • Zフラグ: 計算結果がゼロかどうか
  • Hフラグ: 4ビットで表しきれないとき1(パックBCD向けのキャリーフラグ)
  • P/Vフラグ: パリティ・オーバーフロー
  • Nフラグ: 減算のとき1、加算のとき0
  • Cフラグ: 8ビットで表しきれないときに立つキャリーフラグ

ソフトウェア[編集]

ブーリアン型[編集]

例えば多重ループから抜けるときなど、記憶すべき状態が1つしかない場合にはブーリアン型を利用する方法が用いられることが多い。

  • C言語(C89)などブーリアン型が存在しない場合は整数型に真のとき1、偽のとき0を当てはめることで代用される。これは0を偽、非0を真と判断する言語仕様によるものである。

ビットフィールド[編集]

整数値の各ビットをフラグとみなして、1/0を格納する(ビットフィールド)。これにより複数のフラグを一括で管理することができる。フラグが立っているかを判定する際にビット演算を要するため、可読性が下がると言う者もいる。具体的には列挙型やそれに類似するデータ構造や表現を利用することが多い。

  • C言語では列挙型のほか、structを利用する場合、各状態に対応する整数値を定数マクロで定義する場合がある。
  • C#では列挙型にFlags属性をつけることができる。これにより定義した列挙型がビットフィールドとして使われていることを明示的に示すことができる。
  • その他の多くの言語では定数(const)あるいはイミュータブルな値(final)とビット演算を用いることでビットフィールドでのフラグ管理が可能である。

関連項目[編集]