/
実行時間制限: 0 msec / メモリ制限: 0 KiB
キーポイント
- 条件式の結果は真のとき
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)とほとんど同じ意味になってしまいます。
問題
リンク先の問題を解いてください。