擬似言語の算術演算子と優先順位|かっこと mod の読み方【基本情報技術者試験 科目B】

基本情報技術者試験

現行FE シラバス Ver9.2 準拠擬似言語の記述形式は2022年から変更なし最終更新 2026-10-17

式は左から順に計算されるとは限りません。どれを先に計算するかは演算子ごとに決まっていて、その順番は記述形式に表で示されています。表を丸暗記する必要はありません。この回では算術演算子の優先順位── かっこ・mod・単項の + - ── を扱います。表にある and / or / not は、G8-2 で扱います。

期間限定クーポンPR|Udemy の講座科目B オリジナル模試 3回分・60問42%OFF 1,500円2,600円中身を見る ›

演算子の一覧 ── IPAが決めている優先順位

出典:IPA「擬似言語の記述形式」

〔演算子と優先順位〕

演算子の種類 演算子 優先度
式 () . 高
単項演算子 not + - ↑
二項演算子(乗除) mod × ÷ ↑
二項演算子(加減) + - ↑
二項演算子(関係) ≠ ≦ ≧ < = > ↑
二項演算子(論理積) and ↑
二項演算子(論理和) or 低

注記 演算子 . は,メンバ変数又はメソッドのアクセスを表す。
   演算子 mod は,剰余算を表す。

※ 原典では優先度の欄が上下1本の矢印で示されています。ここでは行ごとに ↑ で置き換えています。

上にあるものほど先に計算されます。表は7行ありますが、出題を読むときに実際に効いてくるのは次の3つです。

この表から持ち帰る3つ

① かっこの中がいちばん先。② mod は × ÷ と優先順位が同じ=+ - より先。③ 関係演算子は、計算したあと。

残りは、算数と同じ「掛け算・割り算が先、足し算・引き算があと」という常識どおりです。③で= や > といった関係演算子の優先順位が + - より低いのは、a + 1 > b が (a + 1) > b という意味になるということです。

表のいちばん下にある and と or、2行目にある単項の not は論理演算子で、G8-2 でまとめて扱います。and と or の優先順位がいちばん低いことだけ、ここで見ておいてください。

かっこ ── 最優先。書いた人が順番を指定した場所

実際の出題から1行だけ引きます。mod を使って、配列の格納位置を計算する関数です。

出典:令和5年度 基本情報技術者試験 科目B 公開問題 問4(プログラムの一部)

○整数型: calcHash2(整数型: value)
  return ((value + 3) mod hashArrayの要素数) + 1

この hashArray は、同じプログラムの別の場所で次のように用意されています。

  hashArray ← {5個の -1}

要素数は 5 です。つまり hashArrayの要素数 のところは 5 と読み替えられます。

かっこが二重になっています。内側の (value + 3) を外すと、返る数が変わります。value を 18 として並べてみます。

かっこ1つで、答えがここまで変わる(value = 18)

出題どおり ((value + 3) mod 5) + 1

先に 18 + 3 = 21→ 21 mod 5 = 1→ +1 して 2

内側のかっこを外すと (value + 3 mod 5) + 1

先に 3 mod 5 = 3→ 18 + 3 = 21→ +1 して 22

mod は + より優先順位が高い演算子です。かっこが無ければ mod のほうが先なので、value + 3 mod 5 は value + (3 mod 5) という意味になります。

この関数が返すのは要素番号です。2 は使える番号、22番目の要素はありません。それでも書き方としては正しいままなので、どこも間違いを教えてくれません。

かっこが書いてあるところは、書いた人が順番を気にした場所です。読むときの目印になります。

同じことを、1行ずつ動かして確かめます。「いま計算していること」の欄に、式のどこから手を付けているかが出ます。

式はどう計算されるか ── かっこと mod

当サイトオリジナル


ループ開始前

いま計算していること

まだ計算していません

変数の状態

トレース表(進めると1行ずつ積み上がります)

擬似言語の〔演算子と優先順位〕から、この問いに使う行を抜き出すと、こうなっています。

優先順位(上の行ほど高い)

式( ) .

乗除mod × ÷

加減+ -

かっこを付けずに n × 2 + 1 mod 3 と書いた場合、どう計算されますか。

mod ── 割った余り

記述形式の注記に一行だけ書かれています ── 「演算子 mod は,剰余算を表す」。a mod b は a を b で割ったときの余りです。

式 何回割れて、いくつ残るか
7 mod 3 7 ÷ 3 = 2 余り 1 3 が 2回取れて、1 残る
18 mod 5 18 ÷ 5 = 3 余り 3 5 が 3回取れて、3 残る
3 mod 5 3 ÷ 5 = 0 余り 3 5 は 1回も取れず、3 がそのまま残る
10 mod 5 10 ÷ 5 = 2 余り 0 5 が 2回取れて、0(割り切れる)
割られる数のほうが小さいときに手が止まる

3 mod 5 のように割られる数のほうが小さいと、とっさに答えが出にくくなります。1回も割れないので、そのまま全部が余りです。割り算の形に直すと 3 ÷ 5 = 0 余り 3 ── 商が 0 で、余りが 3。だから 3 mod 5 は 3 です。

割る数のほうを答えてしまう間違いが、いちばん多いところです。3 mod 5 の答えは 5 に関係する数ではなく、3 そのもの。0 mod 5 なら 0 ÷ 5 = 0 余り 0 で 0 です。

ここは実際の出題で計算させられる場所です。a mod b の答えは必ず 0 以上 b 未満(a・b が正のとき)と覚えておくと、答えが範囲から外れたときに気づけます。

mod がプログラムに出てきたら、たいてい次のどちらかの意図です。

書かれ方 意味していること
(x mod 2)が0と等しい x は偶数
(x mod n)が0と等しい x は n の倍数(n で割り切れる)
(x mod n) + 1 どんな x でも 1 〜 n の範囲に収める(要素番号を作るときの定番)

実際の出題では、条件が日本語で書かれることもあります。次の1行がそれです。

出典:令和7年度 基本情報技術者試験 科目B 公開問題 問1(プログラムの一部)

    if ((i mod 4)が0と等しい)

i を 1 から 10 まで 1 ずつ増やす繰返しの中に、if ((i mod 4)が0と等しい) の行があるとします。この if が真になるのは、i がいくつのときですか。

要素数が 7 の配列があります(配列の要素番号は 1 から始まる)。整数 k から、(k mod 7) + 1 を計算して要素番号にします。k が 3 のとき、何番目の要素になりますか。

x を 1 から 10 まで変えたとき、(x mod 3)が1と等しい が真になる x をすべて挙げたものはどれですか。

単項の + - と、演算子 .

表の2行目にある単項演算子は、後ろの1つだけに効く演算子です。-1 の - がこれで、「1 から引く」ではなく「マイナスの 1」という符号です。not も、後ろの1つの真偽を否定するので単項です(G8-2)。

3 - 1 の -(引き算)と -1 の -(符号)は同じ記号で別の演算子で、表でも優先順位が違います。前に値(数・変数・閉じかっこ)があれば引き算、無ければ符号と読み分けます。

出典:令和5年度 基本情報技術者試験 科目B 公開問題 問4(プログラムの一部)

  hashArray ← {5個の -1}

かっこの節で、要素数を確かめるために引いた行です。-1 の - が単項演算子にあたります。要素数 5 で、すべての要素が マイナス1 の配列ができます。

次の2行を実行すると、y の値はいくつになりますか。

整数型: x ← 5
整数型: y ← -x + 3
演算子 . は、いま覚えなくてよい

表のいちばん上にある . は、注記のとおり「メンバ変数又はメソッドのアクセスを表す」=オブジェクト指向の記法で使うものです。listHead.next のように書きます。G12-1 で扱います。ここでは「表のいちばん上の行に () と並んでいる」ことだけ見ておけば十分です。

この文法が実際に出た問題

ここまでの内容がそのまま得点になる出題があります。プログラムの中身は難しくなく、mod を5回、正確に計算できるかで答えが決まります。上で断片を引いた calcHash2 と {5個の -1} は、この問題のものです。

出典:令和5年度 基本情報技術者試験 科目B 公開問題 問4(独立行政法人情報処理推進機構)

つまずきポイントまとめ

まちがえ方 正しい理解
式を左から順に計算する 優先順位の高い演算子から。value + 3 mod 5 は value + (3 mod 5)
mod を足し算・引き算と同じ扱いにする × ÷ と優先順位が同じ。+ - より先に計算される
3 mod 5 が分からず手が止まる 1回も割れないのでそのまま 3。答えは必ず 0 以上 5 未満
(x mod n) + 1 の + 1 を忘れる 余りは 0〜n-1、要素番号は 1〜n。そのずれを埋める + 1
-1 の - を引き算だと思う 前に値(数・変数・閉じかっこ)が無ければ符号(単項演算子)

次に読む

この記事で引用した資料

いずれも独立行政法人情報処理推進機構(IPA)が公表したものです。IPAは公表済みの試験問題について、教育目的での使用に許諾および使用料を不要としていますが、著作権は放棄していません。本記事では、引用した箇所の文言を改変していません(省略や補いがある場合は、その場に明記しています)。

シミュレータと練習問題は当サイトのオリジナルです。

タイトルとURLをコピーしました