bool型

概要

$1$ bitで truefalse のみ入れられる型。
if分岐などの条件に長々と書きたくないときに、bool 型変数に一度書き込んだりする。
あるいは、大量の条件を処理する場合に事前に bool 型変数を用意して処理することもある。

宣言と初期化

宣言だけする場合

bool a;

初期化もする場合

bool a = true;

可能な演算

代入 =

a=b; で、変数 a の中身を b に書き換える。
数学とは違い、左右を逆にして b=a; と書くと意味が変わるので注意。

かつ &&

a&&b で、ab が両方 true なら true、片方でも false なら false、という演算になる。
bool 型変数でなくても bool 型を返す判定に対しても使える。
例えば、以下で「x は $1$ 以上かつ $10$ 以下」という条件を表せることになる。

1<=x&&x<=10

または ||

a||b で、ab が片方でも true なら true、両方 false なら false、という演算になる。
bool 型変数でなくても bool 型を返す判定に対しても使える。
例えば、以下で「xy のどちらか一方でも $0$」という条件を表せることになる。

x==0||y==0

反転 !

!a で、atrue なら falseafalse なら true、という演算になる。

ビット演算系

一応ビット演算は可能だが、あまり使うことはないかも……。

よく使う処理

if分岐のときに大量の条件をループで扱う処理

全部 true なら実行したい/$1$ つでも false なら実行したい

全部 true なら実行するコード。

bool flag = true;
for (int i=0; i<n; i++) {
  if (!i個めの判定) flag = false;  // 条件は否定形なので注意
}
if (flag) 実行したい処理

最後の行を

if (!flag) 実行したい処理

に変更すれば、$1$ つでも false で実行。

$1$ つでも true なら実行したい/全部 false なら実行したい

$1$ つでも true なら実行。

bool flag = false;
for (int i=0; i<n; i++) {
  if (i個めの判定) flag = true;
}
if (flag) 実行したい処理

最後の行を

if (!flag) 実行したい処理

に変更すれば、全部 false で実行。

注意点

「かつ」と「または」の優先順位

a||b&&c と書いた場合、&& の方が優先順位が高いので、a||(b&&c) と解釈される。
……が、ややこしいので、括弧をつけて書くように心がけたい。

関連アルゴリズム

if分岐

条件が truefalse かによって、処理を分岐させる。