本物のC

C の基本:条件式と真理値


値を比較する

「~が成り立つならば」という条件を表すのが条件式(conditional expression)です。

例えば「変数xの値が 0 と等しい」という条件は

x == 0

で表されます。値の比較により条件式を作る演算子には以下のものがあります。

記号 意味 対応する数学記号
== 等しい =
!= 異なる
< 小なり <
<= 以下
> 大なり >
>= 以上

条件式はその条件が成り立っている場合に 1、成り立たない場合に 0 の値になります。(これらの値はint型です6.5.8#6, 6.5.9#3。)

条件式が成り立っている事をである(be true)、成り立っていない事をである(be false)と言います。

条件を組み合わせる

次の様な演算子によって、より複雑な条件を指定する事ができます。

記号 意味 対応する数学記号
! ~でない(not)
&& かつ(and)
|| または(or)

これらにより作られる条件式もその条件が成り立っている場合に 1、成り立たない場合に 0 の値になります。(やはりこれらの値はint型です6.5.3.3#5, 6.5.13#3, 6.5.14#3。)

真理値

条件の「真」と「偽」は二種類の値と考える事ができ、これを真理値(truth value)と呼びます。(真偽値とも呼びますが真理値の方がちゃんとした用語と看做されている気がします。論理学における truth value の訳語が元だからでしょうか。)

Cでの真理値は元々数値型により「0 以外は真」「0 は偽」と表現していたのですが、「真理値を表現するint」と「数値を表現するint」が紛らわしいので

typedef int bool;

としてbool型を真理値に用いる習慣がありました。(bool の名前は真理値の演算を抽象化したブール代数〈Boolean algebra〉に因っています。)

C99 では真理値を表現する型が規格に取り入れられましたが、上の習慣で書かれたコードがコンパイルができなくなるのを避ける為に_Boolという名前になっています。その心配がないコードでは、stdbool.hをインクルードする事で_Boolboolの名前で使う事ができます。