フラグ (コンピュータ)

From Wikipedia, the free encyclopedia

コンピュータにおけるフラグ: flag)とは、真か偽か0か1かマイナスが付くか付かないか、などといった情報量が1ビットの値(情報)を状態として保持する、レジスタ変数などのことである。メモリの節約などのために、複数ビットを持つ整数型を使って、フラグの集合をコンパクトに管理することもあれば、プログラムの可読性やメモリアドレッシングの高速化を優先して、1バイトや4バイトの整数型を使って単一の真偽値を管理することもある。

語源は「」を意味する英語 flag であり、旗を連想させるような「上げる・立てる」および対義語として「下ろす・降ろす・倒す」といった表現が使われることもあるが、他に「落ちる・落とす」などその他の表現が使われることもある。電気信号のアナロジーから、オン/オフ(ON/OFF)という表現が使われることもある。プログラミング言語のソースコード上では、変数への真値の代入によりフラグを立てる操作に相当する処理を、また偽値の代入によりフラグを降ろす操作に相当する処理を書くことができる。

以上の他に「トグル」(: toggle)という操作がある。押しボタン型スイッチに見られる「プッシュ・プッシュ型」のように、操作の度に状態が交互に切り替わるような操作である。この操作は、プログラミング言語のソースコード上では条件分岐条件演算子と再代入を使って書くことができるが、x = !xのように論理否定演算子と再代入を使ったり、x.toggle()のようにメソッドを使ったりして簡潔に書くことのできる言語もある[注釈 1]

またフラグが集まったバイトワード等の一部を操作するには、ビットマスクを用いたビット単位の演算を使う。

ハードウェア

ステータスレジスタ

例: Z80ステータスレジスタ

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

ソフトウェア

ブーリアン型

フラグとして変数を定義するとき、ブーリアン型を用いることがほとんどである。ブーリアン型は「真」(フラグが立っている)および「偽」(フラグが立っていない)[注釈 2]のみを値として受けつけ、都合が良いからである。JavaC#if文など、条件式が期待される文脈ではブーリアン型しか受け入れられない言語もある。真値と偽値には、truefalseといった専用リテラルがキーワードまたは予約語として用意されていることが多い。

古い規格バージョンのC言語ANSI C規格など)に代表されるように、ブーリアン型が無い言語もある。そういった言語では、多くが組み込みの固定長整数型[注釈 3]または数値型[注釈 4]で代用する仕様となっている。C言語の場合、0が偽[注釈 5]、0以外が真として扱われる。C言語では偽値の論理否定は真値の代表値すなわち1となる仕様であり、例えば !0 は1になり、真値の二重否定 !!"hello" は1になる。このような慣習はシステムや言語、ソフトウェアフレームワークによって大きく異なることが多く、例えばUnixシェルでは0が真で1が偽である[注釈 6]。他には-1が真で0が偽という環境もある[注釈 7][注釈 8]

ビットフィールド

言葉の広まり

脚注

関連項目

Related Articles

Wikiwand AI