前回は、数を計算する演算子の順番を見ました。今回は真か偽かを扱う論理演算子です。and / or / not の3つしかありませんが、if と while の条件は、ほぼこの3つで組み立てられています。
期間限定クーポンPR|Udemy の講座科目B オリジナル模試 3回分・60問42%OFF 1,500円この回の内容を動画で見る
次のページで講義の目次と無料の講義を見られます。受講ボタンとクーポンコードもそこにあります。
この回の内容を動画で見る
解くための再現性が身につく講義29本小テスト86問模試3回分IT資格の森で見る
講義「演算子(算術・論理・ビット)」(全7分19秒)は、IT資格の森(月額1,280円)の会員向けです。科目Bは、1行ずつ値を追うアニメの講義と、講義ごとの小テスト、本番と同じ形の模擬試験がそろっています。
この3つは真か偽かを受け取って、真か偽かを返す演算子です(論理型の値、つまり true,false を扱います)。
and ── 真になるのは1通りだけ
A and B は「A かつ B」と読みます。両方とも真のときだけ、全体が真になります。
材料の組は4通りしかないので、全部あげてしまいます。
A と B の組は4通りしかない
A が真、B が真→ 真
A が真、B が偽→ 偽
A が偽、B が真→ 偽
A が偽、B が偽→ 偽
真になるのはいちばん上の1通りだけ。残りの3通りはすべて偽です。
ここから、実戦で効く読み方が出てきます。
and を偽にするのは簡単、真にするのは大変
片方が偽だと分かった時点で、全体は偽です。もう片方が真でも偽でも、結果は変わりません。
だから while の条件が and でつながれているとき、繰返しが終わるのは「どちらか片方が成り立たなくなったとき」になります。両方だめになるまで続くわけではありません。
実際の出題にも、この形の繰返しがあります。i > n1 と j > n2 のどちらか一方でも成り立った時点で抜けます。
出典:令和6年度 基本情報技術者試験 科目B 公開問題 問4(プログラムの一部)
while ((i ≦ n1) and (j ≦ n2))
次のプログラムを実行して繰返しを抜けたとき、i と j の値はいくつですか。
整数型: i ← 1 整数型: j ← 1 while ((i ≦ 3) and (j ≦ 5)) i ← i + 1 j ← j + 3 endwhile
or ── 偽になるのは1通りだけ
A or B は「A または B」。どちらか一方でも真なら、全体が真です。
同じ4通りを、or で見る
A が真、B が真→ 真
A が真、B が偽→ 真
A が偽、B が真→ 真
A が偽、B が偽→ 偽
偽になるのはいちばん下の1通りだけ。残りの3通りはすべて真です。
and とちょうど逆になっています。and は真になるのが1通り、or は偽になるのが1通り。
日本語の「AまたはB」はどちらか片方に聞こえますが、or は両方とも真でも真です。1行目に注目してください。
「少なくともどちらか一方」と読むと間違えません。
and と or を取り違えないための覚え方
- 数の少ないほうを覚える。
andは真が1通り、orは偽が1通り - 条件式を見たら、まずその1通りに当てはまるかを調べる
- 当てはまらなければ、答えは残りのほうで確定する
4通りを全部覚える必要はありません。覚えるのは、演算子ごとに1行だけです。
繰返しが while ((x ≠ 0) or (y ≠ 0)) で始まっています。この繰返しを抜けるのは、どんなときですか。
not ── 否定すると、境界がどちらへ入るか
not A は「A でない」。A が偽のときに真になります。受け取るのは後ろの1つだけで、この形を単項演算子といいます。
難しいのは意味ではなく、否定したときに境界の値がどちらへ入るかです。
not (x > 5)
x > 5 は「5 より大きい」=5 を含みません。これを否定すると「5 より大きくない」=5 以下になり、5 が入ってきます。x < 5 ではありません。それだと 5 がどちらにも属さなくなってしまいます。
| もとの条件 | 否定すると | 境界の値(5)は |
|---|---|---|
x > 5 |
x ≦ 5 |
もとでは外、否定すると中 |
x ≧ 5 |
x < 5 |
もとでは中、否定すると外 |
x = 5 |
x ≠ 5 |
もとでは中、否定すると外 |
否定しても、境界はどちらかに必ず属する
> の否定は ≦、≧ の否定は <。等号が反対側へ移るだけです。
等号ごと消してしまう(> の否定を < にする)のが、いちばん多い読み違いです。
次のプログラムを、score に 59,60,61 をそれぞれ入れて実行します。hantei に “再試” が入るのは、どの場合ですか。
整数型: score 文字列型: hantei ← "合格" if (not (score ≧ 60)) hantei ← "再試" endif
1行ずつ動かして確かめる
3つとも、動かして見たほうが早く入ります。3行目と4行目は同じ2つの条件から作り、5行目はそのうち1つを否定します。演算子で答えがどう変わるかを見てください。
真偽はどう組み立てられるか ── and / or / not
当サイトオリジナル
ループ開始前
いま計算していること
変数の状態
結果
トレース表(進めると1行ずつ積み上がります)
プログラミング言語によっては、A and B の A が偽だった時点で B を調べずに打ち切ります。擬似言語の記述形式には、この打ち切りについての定めがありません。
公開されている問題で確かめたかぎり、and の条件はどちらで解釈しても答えが同じです。両方を評価するつもりで読んでください。
かっこが無いとき、どう解釈されるか
実際の出題では、条件のひとつひとつにかっこが付いているのがふつうです。それでも、かっこ無しで書かれた例があります。
出典:令和6年度 基本情報技術者試験 科目B 公開問題 問1(解答群ウ)
x > y and y > z
G8-1 で見た優先順位の表では、関係演算子(> = など)の優先順位が and より高くなっています。だからこの行は (x > y) and (y > z) ── 「x は y より大きく、しかも y は z より大きい」と読みます。
かっこが無い場合の解釈
x > y and y > z→ (x > y) and (y > z)
and はすでに出そろった真偽をつなぐ演算子なので、比較より先に働くことはありません。
表では not(単項演算子)の優先順位がさらに高く、or がいちばん低くなっています。ただ、公開問題でかっこ無しの例が出たのは、この令和6年度 問1 の解答群だけ(イ・ウ・オの3つ)で、or や not をかっこ無しで混ぜた形は出ていません。
かっこの無い条件式は、計算(+ × mod など)→ 比べる(ここで真偽が出そろう)→ and でつなぐ、の順に片づけます。
擬似言語の〔演算子と優先順位〕から、この問いに使う行を抜き出すと、こうなっています。
優先順位(上の行ほど高い)
乗除mod × ÷
加減+ -
関係≠ ≦ ≧ < = >
論理積and
論理和or
条件式に x + 1 > y and z = 0 と書かれていました。どう解釈されますか。
つまずきポイントまとめ
| まちがえ方 | 正しい理解 |
|---|---|
or を「どちらか片方だけ」と読む |
少なくともどちらか一方。両方とも真でも真 |
and の繰返しが「両方だめになるまで続く」と思う |
片方が偽になった瞬間に全体が偽。そこで抜ける |
x > 5 の否定を x < 5 とする |
正しくは x ≦ 5。等号が反対側へ移るだけ |
not が後ろ全体に効くと思う |
後ろの1つだけ。広く否定したいときは not (…) とかっこで囲む |
| 片方が偽なら残りは読まれないと決めつける | 記述形式に打ち切りの定めは無い。両方を評価するつもりで読む |
次に読む
この記事で引用した資料
- 擬似言語の記述形式 IPAが公開している科目Bの公開問題・サンプル問題(PDF)の冒頭に掲載。名称は年度により「基本情報技術者試験用」と「基本情報技術者試験,応用情報技術者試験用」があるが、本文は同一
- 令和6年度 基本情報技術者試験 科目B 公開問題(2024年7月5日公開)
いずれも独立行政法人情報処理推進機構(IPA)が公表したものです。IPAは公表済みの試験問題について、教育目的での使用に許諾および使用料を不要としていますが、著作権は放棄していません。本記事では、引用した箇所の文言を改変していません(省略や補いがある場合は、その場に明記しています)。
シミュレータと練習問題は当サイトのオリジナルです。


