実行時間制限: 0 msec / メモリ制限: 0 KB
キーポイント
- 条件式の結果は真のとき
1
に、偽のとき0
になる 1
をtrue
で、0
をfalse
で表す- bool型は
true
とfalse
だけが入る型
int型の表現 | bool型の表現 | |
---|---|---|
真 | 1 | true |
偽 | 0 | false |
条件式の結果
C++では、真のことを数値の1
で表現し、偽のことを数値の0
で表現します。
条件式の「計算結果」も真のときは1
、偽のときは0
になります。
次のプログラムは条件式の結果をそのまま出力し、真のときと偽のときでどのような値を取るかを確認しています。
#include <bits/stdc++.h> using namespace std; int main() { cout << (5 < 10) << endl; // 真 cout << (5 > 10) << endl; // 偽 }
実行結果
1 0
演算子の優先順位の関係で、条件式を( )
で囲まないといけないので注意して下さい。
出力を見てみると、条件が真のときは1
、偽のときは0
になっていることがわかります。
1 + 1
の計算結果が2
という数値になること同じように、条件式5 < 10
の計算結果は1
という数値になるということです。
trueとfalse
条件式の部分に直接1
や0
を書くこともできます。次のプログラムはその例です。
#include <bits/stdc++.h> using namespace std; int main() { // 1は真を表すのでhelloと出力される if (1) { cout << "hello" << endl; } // 0は偽を表すのでこのifの中は実行されない if (0) { cout << "world" << endl; } }
実行結果
hello
先述したとおり、C++では「1
と真」「0
と偽」はほとんど同じ意味になります。
しかし、「数値としての1と0」なのか、「真偽を表すための1と0」なのかが分かりにくいことがあります。
そのため、真のことを true
、偽のことを false
で表すことができるようになっています。
次のプログラムは上のプログラムと同じ動作をします。
#include <bits/stdc++.h> using namespace std; int main() { // 1と書くよりも真だということがわかりやすい if (true) { cout << "hello" << endl; } // 0と書くよりも偽だということがわかりやすい if (false) { cout << "world" << endl; } }
bool型
bool型というデータ型があります。この型の変数にはtrue
またはfalse
だけが入ります。
#include <bits/stdc++.h> using namespace std; int main() { int x; cin >> x; bool a = true; bool b = x < 10; // xが10未満のときtrue そうでないときfalseになる bool c = false; if (a && b) { cout << "hello" << endl; } if (c) { cout << "world" << endl; } }
入力
3
実行結果
hello
このように、条件式の結果など、真偽のデータを変数で扱いたい場合はbool型を使います。
いままでif (条件式)
と書いていましたが、基本的にはif (bool型の値)
ということになります。
ここまでの話をまとめたのが次の表です。
int型の表現 | bool型の表現 | |
---|---|---|
真 | 1 | true |
偽 | 0 | false |
bool型を使う場面
今まで学んできたものと違い、「bool型がないと書けないプログラム(計算)」はありません。
bool型は基本的に「条件式の結果」や「状態が2つしか無いもの」を扱っていることを明示するために使います。
これができることによる恩恵は今はわかりにくいかもしれませんが、1.15.関数で紹介する機能を使う場合など、bool型を使うことでプログラムがわかりやすくなることがあります。
なお、今後は「真」や「偽」という言葉の代わりにtrue
やfalse
という言葉を使って説明することがあるので、これらの意味はしっかりと覚えておいてください。
細かい話
細かい話なので、飛ばして問題を解いても良いです。
bool型と数値
実は、0
と1
以外の数値もbool型の値のように扱うことができます。
その場合、0
のときだけfalse
、それ以外の数値はすべてtrue
になります。
#include <bits/stdc++.h> using namespace std; int main() { bool a = 10; // 10はtrue bool b = 0; // 0はfalse cout << a << endl; // 1 cout << b << endl; // 0 // 100はtrue if (100) { cout << "hello" << endl; } }
実行結果
1 0 hello
if文の節で紹介した==
と=
を書き間違える典型的なミスは、この「trueとfalse以外の値もbool型のように受け入れてしまう」という性質によって引き起こされています。
a = b
という式の「計算結果」はb
になります。そのため、if (a = b)
はif (b != 0)
とほとんど同じ意味になってしまいます。
問題
リンク先の問題を解いてください。