この記事は検証可能な参考文献や出典が全く示されていないか、不十分です。出典を追加して記事の信頼性向上にご協力ください。(このテンプレートの使い方)
出典検索?: "フラグ" コンピュータ
コンピュータにおけるフラグ(英: flag)とは、真か偽か・0か1か・マイナスが付くか付かないか、などといった情報量が1ビットの値(情報)を状態として保持する、レジスタや変数などのことである。メモリの節約などのために、複数ビットを持つ整数型を使って、フラグの集合をコンパクトに管理することもあれば、プログラムの可読性やメモリアドレッシングの高速化を優先して、1バイトや4バイトの整数型を使って単一の真偽値を管理することもある。 語源は「旗」を意味する英語 flag であり、旗を連想させるような「上げる・立てる」および対義語として「下ろす・降ろす・倒す」といった表現が使われることもあるが、他に「落ちる・落とす」などその他の表現が使われることもある。電気信号のアナロジーから、オン/オフ(ON/OFF)という表現が使われることもある。プログラミング言語のソースコード上では、変数への真値の代入によりフラグを立てる操作に相当する処理を、また偽値の代入によりフラグを降ろす操作に相当する処理を書くことができる。 以上の他に「トグル」(英: toggle)という操作がある。押しボタン型スイッチに見られる「プッシュ・プッシュ型」のように、操作の度に状態が交互に切り替わるような操作である。この操作は、プログラミング言語のソースコード上では条件分岐や条件演算子と再代入を使って書くことができるが、x = !xのように論理否定演算子と再代入を使ったり、x.toggle()のようにメソッドを使ったりして簡潔に書くことのできる言語もある[注釈 1]。 またフラグが集まったバイト・ワード等の一部を操作するには、ビットマスクを用いたビット単位の演算を使う。 例: Z80のステータスレジスタ フラグとして変数を定義するとき、ブーリアン型を用いることがほとんどである。ブーリアン型は「真」(フラグが立っている)および「偽」(フラグが立っていない)[注釈 2]のみを値として受けつけ、都合が良いからである。JavaやC#のif文など、条件式が期待される文脈ではブーリアン型しか受け入れられない言語もある。真値と偽値には、trueやfalseといった専用リテラルがキーワードまたは予約語として用意されていることが多い。
操作
ハードウェア
ステータスレジスタ「ステータスレジスタ」を参照
Sフラグ: 計算結果の正負
Zフラグ: 計算結果がゼロかどうか
Hフラグ: 4ビットで表しきれないとき1(パックBCD向けのキャリーフラグ)
P/Vフラグ: パリティ・オーバーフロー
Nフラグ: 減算のとき1、加算のとき0
Cフラグ: 8ビットで表しきれないときに立つキャリーフラグ
ソフトウェア
ブーリアン型「ブーリアン型」を参照