この記事は検証可能な参考文献や出典が全く示されていないか、不十分です。出典を追加して記事の信頼性向上にご協力ください。(このテンプレートの使い方)
出典検索?: "フラグ" コンピュータ
コンピュータにおけるフラグ(英: flag)とは、真か偽か・0か1か・マイナスが付くか付かないか、などといった情報量が1ビットの値(情報)を状態として保持する、レジスタや変数などのことである。メモリの節約などのために、複数ビットを持つ整数型を使って、フラグの集合をコンパクトに管理することもあれば、プログラムの可読性やメモリアドレッシングの高速化を優先して、1バイトや4バイトの整数型を使って単一の真偽値を管理することもある。 語源は「旗」を意味する英語 flag であり、旗を連想させるような「上げる・立てる」および対義語として「下ろす・降ろす・倒す」といった表現が使われることもあるが、他に「落ちる・落とす」などその他の表現が使われることもある。電気信号のアナロジーから、オン/オフ(ON/OFF)という表現が使われることもある。プログラミング言語のソースコード上では、変数への真値の代入によりフラグを立てる操作に相当する処理を、また偽値の代入によりフラグを降ろす操作に相当する処理を書くことができる。 以上の他に「トグル」(英: toggle)という操作がある。押しボタン型スイッチに見られる「プッシュ・プッシュ型」のように、操作の度に状態が交互に切り替わるような操作である。この操作は、プログラミング言語のソースコード上では条件分岐や条件演算子と再代入を使って書くことができるが、x = !xのように論理否定演算子と再代入を使ったり、x.toggle()のようにメソッドを使ったりして簡潔に書くことのできる言語もある[注釈 1]。 またフラグが集まったバイト・ワード等の一部を操作するには、ビットマスクを用いたビット単位の演算を使う。 例: Z80のステータスレジスタ フラグとして変数を定義するとき、ブーリアン型を用いることがほとんどである。ブーリアン型は「真」(フラグが立っている)および「偽」(フラグが立っていない)[注釈 2]のみを値として受けつけ、都合が良いからである。JavaやC#のif文など、条件式が期待される文脈ではブーリアン型しか受け入れられない言語もある。真値と偽値には、trueやfalseといった専用リテラルがキーワードまたは予約語として用意されていることが多い。 古い規格バージョンのC言語(ANSI C規格など)に代表されるように、ブーリアン型が無い言語もある。そういった言語では、多くが組み込みの固定長整数型[注釈 3]または数値型[注釈 4]で代用する仕様となっている。C言語の場合、0が偽[注釈 5]、0以外が真として扱われる。C言語では偽値の論理否定は真値の代表値すなわち1となる仕様であり、例えば !0 は1になり、真値の二重否定 !!"hello" は1になる。このような慣習はシステムや言語、ソフトウェアフレームワークによって大きく異なることが多く、例えばUnixシェルでは0が真で1が偽である[注釈 6]。他には-1が真で0が偽という環境もある[注釈 7][注釈 8]。「true (UNIX)」および「false (UNIX)」も参照 この節には独自研究が含まれているおそれがあります。問題箇所を検証し出典を追加して、記事の改善にご協力ください。議論はノート この節のほとんどまたは全てが唯一の出典にのみ基づいています。他の出典の追加も行い、記事の正確性・中立性・信頼性の向上にご協力ください。
操作
ハードウェア
ステータスレジスタ「ステータスレジスタ」を参照
Sフラグ: 計算結果の正負
Zフラグ: 計算結果がゼロかどうか
Hフラグ: 4ビットで表しきれないとき1(パックBCD向けのキャリーフラグ)
P/Vフラグ: パリティ・オーバーフロー
Nフラグ: 減算のとき1、加算のとき0
Cフラグ: 8ビットで表しきれないときに立つキャリーフラグ
ソフトウェア
ブーリアン型「ブーリアン型」を参照
ビットフィールド「ビットフィールド」を参照
言葉の広まり
出典検索?: "フラグ" コンピュータ
この節は世界的観点から説明されていない可能性があります。ノートでの議論と記事の加筆への協力をお願いします。(2023年4月)
「フラグ (ストーリー)」も参照
日本ではフラグという言葉がコンピュータ用語の枠を超えて広まっていったのは1980年代後半からとみられ、パソコン雑誌では『コンプティーク』1985年7、8月号(角川書店)で「持ち物のフラグによるトリック」との見出しがあり、1986、7年の『ログイン』(アスキー)、『マイコンBASICマガジン』(電波新聞社)のアドベンチャーゲーム記事で「フラグ」が何度も使われている[5]。
次いでパチスロ界隈で使われるようになり、1988年3月発行の『パチンコ攻略マガジン』NO.2(プラントピア)で「フラッグ」、1989年10月発行の『パチスロ機種別完全攻略本』(西東社)で「フラグが立つ」との記述があり、『週刊プレイボーイ』1989年4月25日号(集英社)でパチスロ用語として紹介されている[6]。
ファミコン雑誌では1988年までほぼ見受けられないが、ファミコン通信1987年4月17日号の堀井雄二による記事「『ドラゴンクエストII』ができるまで 前編」で注釈なしの使用例がみられ、この記事は『ログイン』1987年4、5月号で連載したコラム「ゆう坊やの虹色ディップスイッチ」を再構成したもので、堀井が同誌で短期連載していた『堀井雄二の実践的アドベンチャーのつくり方』では1986年5月号で「フラグ編」と題して説明がなされていることから、改めて説明するまでもなく、ファミコン通信掲載時にはチェック漏れがあった可能性がある[5]。そして先述のパチスロには興味はないが週刊プレイボーイのような青年誌を読んだゲーム雑誌ライターも使うようになり[6]、1990年に「ゆう坊やの虹色ディップスイッチ」の単行本化の際には注釈が存在、この頃にゲーム制作に興味がある子供に知られていったとみられる[5]。