フラグ (コンピュータ)

コンピュータにおけるフラグ（）とは、真か偽か・0か1か・マイナスが付くか付かないか、などといった情報量が1ビットの値（情報）を状態として保持する、レジスタや変数などのことである。メモリの節約などのために、複数ビットを持つ整数型を使って、フラグの集合をコンパクトに管理することもある。
操作.
語源は「旗」を意味する英語 であり、旗を連想させるような「上げる・立てる」および対義語として「下ろす・降ろす・倒す」といった表現が使われることもあるが、他に「落ちる・落とす」などその他の表現が使われることもある。電気信号のアナロジーから、オン／オフ（ON/OFF）という表現が使われることもある。プログラミング言語のソースコード上では、変数への真値の代入によりフラグを立てる操作に相当する処理を、また偽値の代入によりフラグを降ろす操作に相当する処理を書くことができる。
以上の他に「トグル」（）という操作がある。押しボタン型スイッチに見られる「プッシュ・プッシュ型」のように、操作の度に状態が交互に切り替わるような操作である。この操作は、プログラミング言語のソースコード上では条件分岐や条件演算子を使って書くことができるが、codice_1のように論理否定演算子を使ったり、codice_2のようにメソッドを使ったりして簡潔に書くことのできる言語もある。
またフラグが集まったバイト・ワード等の一部を操作するには、ビットマスクを用いたビット単位の演算を使う。
ハードウェア.
ステータスレジスタ.
例: Z80のステータスレジスタ
ソフトウェア.
ブーリアン型.
フラグとして変数を定義するとき、ブーリアン型を用いることがほとんどである。ブーリアン型は「真」（フラグが立っている）および「偽」（フラグが立っていない）のみを値として受けつけ、都合が良いからである。Javaのif文など、言語によっては条件式が期待される文脈ではブーリアン型しか受け入れられないことがある。真値と偽値には、codice_3やcodice_4といった専用リテラルがキーワードまたは予約語として用意されていることが多い。
C言語のC89などブーリアン型が無い言語もある。そういった言語では、多くが組み込みの固定長整数型または数値型で代用する仕様となっている。C言語の場合、0が偽、0以外が真として扱われる。C言語では偽値の論理否定は真値の代表値すなわち1となる仕様であり、例えば codice_5 は1になり、真値の二重否定 codice_6 は1になる。このような慣習はシステムや言語、ソフトウェアフレームワークによって大きく異なることが多く、例えばUnixシェルでは0が真で1が偽である。他には-1が真で0が偽という環境もある。
言葉の広まり.
日本ではフラグという言葉がコンピュータ用語の枠を超えて広まっていったのは1980年代後半からとみられ、パソコン雑誌では『コンプティーク』1985年7、8月号（角川書店）で「持ち物のフラグによるトリック」との見出しがあり、1986、7年の『ログイン』（アスキー）、『マイコンBASICマガジン』（電波新聞社）のアドベンチャーゲーム記事で「フラグ」が何度も使われている。
次いでパチスロ界隈で使われるようになり、1988年3月発行の『パチンコ攻略マガジン』NO.2（プラントピア）で「フラッグ」、1989年10月発行の『パチスロ機種別完全攻略本』（西東社）で「フラグが立つ」との記述があり、『週刊プレイボーイ』1989年4月25日号（集英社）でパチスロ用語として紹介されている。
ファミコン雑誌では1988年までほぼ見受けられないが、ファミコン通信1987年4月17日号の堀井雄二による記事「『ドラゴンクエストII』ができるまで 前編」で注釈なしの使用例がみられ、この記事は『ログイン』1987年4、5月号で連載したコラム「ゆう坊やの虹色ディップスイッチ」を再構成したもので、堀井が同誌で短期連載していた『堀井雄二の実践的アドベンチャーのつくり方』では1986年5月号で「フラグ編」と題して説明がなされていることから、改めて説明するまでもなく、ファミコン通信掲載時にはチェック漏れがあった可能性がある。そして先述のパチスロには興味はないが週刊プレイボーイのような青年誌を読んだゲーム雑誌ライターも使うようになり、1990年に「ゆう坊やの虹色ディップスイッチ」の単行本化の際には注釈が存在、この頃にゲーム制作に興味がある子供に知られていったとみられる。