AOYAMA Koji's プログラミングブログ - プログラミングを楽しく体験

【マンガで感じる】演算子 ~計算操作を行う記号~ 【本当の基礎から学ぶゲームプログラミング】プログラミング初心者向け・入門編・基礎編初中級者向けプログラミング解説プログラマー向け実装解説[初心者向けゲーム開発入門]

2026/05/04
【マンガで感じる】演算子 ~計算操作を行う記号~ 【本当の基礎から学ぶゲームプログラミング】[初心者向けゲーム開発入門]

 40年以上のゲームプログラミング経験をマンガで可視化。 今回は演算子。 主に、計算操作を行うための記号です。 演算子を使いこなし上手く計算式が作れると、プログラミングの幅が格段に広がります。
【マンガで感じる】演算子 ~計算操作を行う記号~ 【本当の基礎から学ぶゲームプログラミング】[初心者向けゲーム開発入門]

プログラミングブログ記事一覧


[PR]

【マンガで感じる】演算子 ~計算操作を行う記号~


【マンガで感じる】演算子 ~計算操作を行う記号~ 【本当の基礎から学ぶゲームプログラミング】[初心者向けゲーム開発入門] メカ・プレイヤーナンバーが 1 赤O の状態 [メカ・プレイヤーナンバー]の表示 【マンガで感じる】演算子 ~計算操作を行う記号~ 【本当の基礎から学ぶゲームプログラミング】[初心者向けゲーム開発入門] 社長「初手をどうぞ!」 クリスタル「はい」にっこり頷く 【マンガで感じる】演算子 ~計算操作を行う記号~ 【本当の基礎から学ぶゲームプログラミング】[初心者向けゲーム開発入門] クリスタル「では」「(150,50)を中心に半径…」以下略 【マンガで感じる】演算子 ~計算操作を行う記号~ 【本当の基礎から学ぶゲームプログラミング】[初心者向けゲーム開発入門] 盤面 .O. ... ... 【マンガで感じる】演算子 ~計算操作を行う記号~ 【本当の基礎から学ぶゲームプログラミング】[初心者向けゲーム開発入門] 社長「ナルホド、そう来ましたか!」ニヤリ 【マンガで感じる】演算子 ~計算操作を行う記号~ 【本当の基礎から学ぶゲームプログラミング】[初心者向けゲーム開発入門] メカ・プレイヤーナンバーが 1 赤O のまま 【マンガで感じる】演算子 ~計算操作を行う記号~ 【本当の基礎から学ぶゲームプログラミング】[初心者向けゲーム開発入門] 社長「手番を交代してください」 クリスタル「承知しました」 【マンガで感じる】演算子 ~計算操作を行う記号~ 【本当の基礎から学ぶゲームプログラミング】[初心者向けゲーム開発入門] 演算子 ~計算操作を行う記号~ 【マンガで感じる】演算子 ~計算操作を行う記号~ 【本当の基礎から学ぶゲームプログラミング】[初心者向けゲーム開発入門] (クリスタル)「メカ・マイナス!」「引き算をお願い」 メカ・マイナス登場 【マンガで感じる】演算子 ~計算操作を行う記号~ 【本当の基礎から学ぶゲームプログラミング】[初心者向けゲーム開発入門] (クリスタル)「メカ・イコール!」「代入をお願い」 メカ・イコール登場 【マンガで感じる】演算子 ~計算操作を行う記号~ 【本当の基礎から学ぶゲームプログラミング】[初心者向けゲーム開発入門] クリスタル「じゃあ、手番交代を始めるよー」 【マンガで感じる】演算子 ~計算操作を行う記号~ 【本当の基礎から学ぶゲームプログラミング】[初心者向けゲーム開発入門] クリスタル「まずマイナスが、3から、プレイヤーナンバーを引いて」 手に<3のオブジェ>を渡そうとしている 【マンガで感じる】演算子 ~計算操作を行う記号~ 【本当の基礎から学ぶゲームプログラミング】[初心者向けゲーム開発入門] メカ・マイナスが両手を広げている メカ・マイナスの右手に<3のオブジェ> メカ・マイナスの左手にメカ・プレイヤーナンバー 【マンガで感じる】演算子 ~計算操作を行う記号~ 【本当の基礎から学ぶゲームプログラミング】[初心者向けゲーム開発入門] メカ・マイナス「3 - 1」 【マンガで感じる】演算子 ~計算操作を行う記号~ 【本当の基礎から学ぶゲームプログラミング】[初心者向けゲーム開発入門] メカ・マイナス「2」 【マンガで感じる】演算子 ~計算操作を行う記号~ 【本当の基礎から学ぶゲームプログラミング】[初心者向けゲーム開発入門] クリスタル「その計算結果を」「イコールが」「プレイヤーナンバーに入れて」 【マンガで感じる】演算子 ~計算操作を行う記号~ 【本当の基礎から学ぶゲームプログラミング】[初心者向けゲーム開発入門] メカ・イコールが「2」を手に持つ 【マンガで感じる】演算子 ~計算操作を行う記号~ 【本当の基礎から学ぶゲームプログラミング】[初心者向けゲーム開発入門] メカ・イコールが、メカ・プレイヤーナンバーのお腹に「2」を押し込む 【マンガで感じる】演算子 ~計算操作を行う記号~ 【本当の基礎から学ぶゲームプログラミング】[初心者向けゲーム開発入門] メカ・プレイヤーナンバーのお腹 2 【マンガで感じる】演算子 ~計算操作を行う記号~ 【本当の基礎から学ぶゲームプログラミング】[初心者向けゲーム開発入門] メカ・プレイヤーナンバーのフラッグ看板 青X (クリスタル)「手番交代完了!」 【マンガで感じる】演算子 ~計算操作を行う記号~ 【本当の基礎から学ぶゲームプログラミング】[初心者向けゲーム開発入門] クリスタル「社長の手番です」 社長「よーし!では…」 【マンガで感じる】演算子 ~計算操作を行う記号~ 【本当の基礎から学ぶゲームプログラミング】[初心者向けゲーム開発入門] 省略の一コマ 【マンガで感じる】演算子 ~計算操作を行う記号~ 【本当の基礎から学ぶゲームプログラミング】[初心者向けゲーム開発入門] 盤面 XO. ... ... 【マンガで感じる】演算子 ~計算操作を行う記号~ 【本当の基礎から学ぶゲームプログラミング】[初心者向けゲーム開発入門] 社長「交代です!」 【マンガで感じる】演算子 ~計算操作を行う記号~ 【本当の基礎から学ぶゲームプログラミング】[初心者向けゲーム開発入門] クリスタル「さっきと同じ方法で手番交代するよー」「マイナスが、3から、プレイヤーナンバーを引いて」 【マンガで感じる】演算子 ~計算操作を行う記号~ 【本当の基礎から学ぶゲームプログラミング】[初心者向けゲーム開発入門] メカ・マイナスが両手を広げている メカ・マイナスの右手に<3のオブジェ> メカ・マイナスの左手にメカ・プレイヤーナンバー 【マンガで感じる】演算子 ~計算操作を行う記号~ 【本当の基礎から学ぶゲームプログラミング】[初心者向けゲーム開発入門] メカ・マイナス「3 - 2」 【マンガで感じる】演算子 ~計算操作を行う記号~ 【本当の基礎から学ぶゲームプログラミング】[初心者向けゲーム開発入門] メカ・マイナス「1」 【マンガで感じる】演算子 ~計算操作を行う記号~ 【本当の基礎から学ぶゲームプログラミング】[初心者向けゲーム開発入門] (クリスタル)「計算結果を、イコールが、プレイヤーナンバーに入れて」 メカ・イコールが「1」を手に持つ 【マンガで感じる】演算子 ~計算操作を行う記号~ 【本当の基礎から学ぶゲームプログラミング】[初心者向けゲーム開発入門] メカ・イコールが、メカ・プレイヤーナンバーのお腹に「1」を押し込む 【マンガで感じる】演算子 ~計算操作を行う記号~ 【本当の基礎から学ぶゲームプログラミング】[初心者向けゲーム開発入門] メカ・プレイヤーナンバーのお腹 1 【マンガで感じる】演算子 ~計算操作を行う記号~ 【本当の基礎から学ぶゲームプログラミング】[初心者向けゲーム開発入門] メカ・プレイヤーナンバーのフラッグ看板 赤O 【マンガで感じる】演算子 ~計算操作を行う記号~ 【本当の基礎から学ぶゲームプログラミング】[初心者向けゲーム開発入門] クリスタル「手番交代を完了いたしました!」 社長 考え中 【マンガで感じる】演算子 ~計算操作を行う記号~ 【本当の基礎から学ぶゲームプログラミング】[初心者向けゲーム開発入門] 社長「3から引くだけで」「1と2が入れ替わる?」驚きの表情 クリスタルは控えて頭を下げる 【マンガで感じる】演算子 ~計算操作を行う記号~ 【本当の基礎から学ぶゲームプログラミング】[初心者向けゲーム開発入門] 社長「さすが我が社員!」「天才!!!」あっぱれエフェクト
次のエピソードへ
【マンガで感じる】演算子 ~計算操作を行う記号~ 【本当の基礎から学ぶゲームプログラミング】[初心者向けゲーム開発入門] 関数

OXゲーム開発編 第4話:エピソード「演算子」


 本エピソード「演算子」は、OXゲーム開発編 第4話です。
 OXゲーム開発編は、OXゲーム(三目並べ・マルバツ)の開発を通じて、ゲームプログラミングの基礎の基礎を解説しています。
 OXゲーム開発編の各エピソードは、それまでのエピソードのマンガ(と解説)を前提としていますので、 もし途中から読み始めた方は、ぜひ最初のエピソード「プログラム」から読み進めてください。

演算子のソースコード例


JavaScript

// プレイヤーを変更する
//  1→2
//  2→1
iPlayerNumber = 3 - iPlayerNumber;

OXゲーム(三目並べ・マルバツ):プレイヤー番号を交互に変更する「演算子」実装検証



[PR]

「演算子」とは:計算操作を行う記号


 「演算子」の本質「計算操作を行う記号」です。
 マンガでは、「-」(マイナス)演算子が、値と値の間に入って引き算を行いました。
 そして 1 と 2 を交互に繰り返すプログラムを、3 からその値を引くだけで実現しました。 このように、うまく演算子を使うと実現できることがあり、パズルを解く感覚でプログラミングできます。

ソースコードの仕組み


1と2を入れ替える

// プレイヤーを変更する
//  1→2
//  2→1
iPlayerNumber = 3 - iPlayerNumber;
 このプログラムは、3 から、変数 iPlayerNumber の値を引いて、iPlayerNumber に代入します。 これで iPlayerNumberの値の 12 を入れ替えます。

「実装検証」で体験しよう


 前記「実装検証」セクションにて、解説した iPlayerNumber の変更を体験できます。 ぜひ検証して、マンガの社長が天才と呼んだ演算を感じてください。

ゲームプログラミングにおける「演算子」


 演算子は、ゲームプログラミングを含めたすべてのプログラミングの基本要素です。
 一般的な計算を始め、マンガのように、うまく演算式を作ることで、効率的かつ高速に動作するプログラミングが可能です。 特にゲームプログラミングにおいては、高速に動作するプログラミングは重要なため、使いこなせると大きな力になります。

主要な演算子を解説


 JavaScriptおよび、ゲーム開発で主に使用される C++ や C# に登場する、主な演算子を解説します。

四則演算の演算子


演算子
意味
+
足す、プラス
-
引く、マイナス
*
掛ける
/
割る
%
割った余り
()
カッコ
 これらは四則演算、つまり算数の計算を行う演算子です。
 なお +1-1 のように、「+」と「-」はプラス・マイナスを表す場合にも使います。 数学と同様です。

掛け算と割り算

 「\( \times \)」(乗算記号) や 「\( \div \)」(除算記号)が、まだコンピューターが扱える文字に無かった時代に策定されたこともあり、 多くのプログラミング言語でそれぞれ「*」(アスタリスク)と「/」(スラッシュ)が使用されています。

余り

 「%」(パーセント・剰余)は、割った余りを返します。
 例えば iPlayerNumber % 2 は、2 で割った余りを返します。 これを使用して、1 と 2 を入れ替えるプログラムは以下とも書けます。
iPlayerNumber = (iPlayerNumber % 2) + 1;
 すなわち、iPlayerNumber1 なら 1 + 12 に、2 なら 0 + 11 になります。

比較演算子


演算子
意味
==
左右同じ
===
左右同じ(厳密)
!=
左右異なる
!==
左右異なる(厳密)
<
左辺が右辺より小さい
<=
左辺が右辺以下
>
左辺が右辺より大きい
>=
左辺が右辺以上
 これらは、左右を比べて、「true」(真・正しい)か、「false」(偽・正しくない)かを返す演算子です。
 なお ===!==は、C++ や C# にはありません。 説明の「厳密」とは、データ型も比較する意味ですが、これについては後のデータ型編のエピソードで解説予定です。
 筆者は JavaScript では ==!=で はなく ===!== を使用することを推奨します。

論理演算子


演算子
trueになる条件
&&
かつ(左右どちらもtrue)
||
または(左右どちらかがtrue)
!
否定(右がfalse)
 これらは、「true」「false」に対して論理的な演算を行い、「true」または「false」を返す演算子です。

インクリメント/デクリメント演算子


記述例
意味
結果
++i
i1 を足す
足した後の値
i++
i1 を足す
足す前の値
--i
i から 1 を引く
引いた後の値
i--
i から 1 を引く
引く前の値
 これらは、変数に対してインクリメント(1増やす)、デクリメント(1減らす)を行う単項演算子です。
 変数の前に付けるか後ろに付けるかで結果が変わります。例示します。

JavaScript

let i = 10;
alert( ++i );  // i が 10+1 で 11 になり、結果は変更後の 11
alert( --i );  // i が 11-1 で 10 になり、結果は変更後の 10
alert( i++ );  // i が 10+1 で 11 になり、結果は変更前の 10
alert( i-- );  // i が 11-1 で 10 になり、結果は変更前の 11
 これらは上手に使うことで、読みやすいプログラムになります。 逆に駆使しすぎて読みづらくなることもありますので注意です。

代入演算子


記述方法
意味
変数 = 値
変数に値を代入する
変数 += 値
変数に値を足す
変数 -= 値
変数に値を引く
変数 *= 値
変数に値を掛ける
変数 /= 値
変数を値で割る
 これらはすべて左辺の変数に代入する演算子です。 代入された値が結果になり、例えば以下のように書くことも可能です。
i = (j = 1);
 この式は、まず j = 1 が先に実行されて、変数 j が 1 になります。 また、その結果が 1 となるため i = 1 と同等の意味になり、変数 i も 1 になります。

「計算操作を行う記号」に該当しない演算子


 本エピソードではわかりやすさを優先して、演算子の本質を「計算操作を行う記号」としました。 実際には、それに当てはまらないものもあります。
 例えば Python では、「&&」を「and」、「||」を「or」、「!」を「not」と表現します。 つまり記号ではなくアルファベットを演算子として扱うケースがあります。
 また、new など、特定の機能を持った演算子もあります。こちらについては、後のエピソードでその機能の解説に合わせて解説予定です。

演算子の優先順位と結合性


 演算子には優先順位結合性が定められています。 基本的には算数と同じで、掛け算や割り算の優先順位が高いです。

主な演算子の優先順位・結合性一覧


演算子(優先順位順)
結合性
(式)
なし(内側から)
変数++ 変数--
なし
++変数 --変数 !値 +値 -値
なし(右から)
* / %
左から
+ -
左から
< <= > >=
左から
== === != !==
左から
= += -= *= /=
右から
 この表は、JavaScript における主な演算子を、優先順位順に並べ、結合性を記載したものです。 多くのプログラミング言語が、この基準に沿っています。

演算子の優先順位の例


 以下の式は、*- より優先順位が高いため、* が先に計算されて、結果は 0 になります。
alert( 9 * 9 - 9 * 9 );    // (9*9) - (9*9)

演算子の結合性の例


左から

 以下の例は、*/優先順位が同じで、結合性が左からのため、左から順番に計算されて、結果は 81 になります。
alert( 9 * 9 / 9 * 9 );    // ((9 * 9) / 9) * 9


右から

 以下の例は、結合性が右からのため、右から順番に計算・処理されます。 まず j1 になり、その結果を代入するため i1 になります。
let i = j = 1;    // i = (j = 1)


なし

 「なし」は、連続できない、あるいは、解釈が限定的であることを示しています。
 例えば i---- は、構文エラーになります。
 一方 !!b は、動作します。 これは !!値 形式のため、まずは b に直結している !b が解釈されます。 それが返す値に対して左側の !値 が計算されます。 つまり解釈がこのパターンに限定されていて、結果的に「右から」になります。
 ただし ++++i は、JavaScript ではエラー、C++ では動くなど、プログラミング言語により異なる部分もありますので、必要に応じてご自身で確認をお願いします。

無理せず()を使おう


 優先順位や結合性を正確に利用すると、「()」(カッコ)を省略できます。
 ただし、()を省略する「必要」はありません。 プログラムが読みづらいと感じたら、無理せず「()」(カッコ)を利用しましょう。
 プログラミングにおいて可読性は常に重視すべきです。

【プログラミングの醍醐味】共通ルールを発見する


 マンガのように、共通の式で複数のシチュエーションを処理するのは、パズルを解く楽しさがあり、これはプログラミングの醍醐味です。

ひとつの式で1と2を入れ替える


 マンガの例では、手番を変更するために、1なら2に、2なら1にする必要があり、 3 から プレイヤー番号の数値(先手1、後手2)を引くことで、実現しました。
 なお、後のエピソードで解説している「条件分岐」を用いて実装しても問題ありません。

工夫次第でできることは増える


 工夫次第で、演算子を用いた計算式でできることは、かなりあります。
 できるだけシンプルなルールに集約することは、良いソースコード作成に重要です。

可読性重視:無理はしない


 プログラムがシンプルになる場合は、積極的に計算式を活用しましょう。
 ただし、逆に複雑になる場合は無理にまとめず、可読性を優先すべきです。

【職人の視点】Pythonにおける代入とこだわり


 Pythonには、変数への代入を伴う演算子がありません。
 すべてのプログラムラミング言語が同じ仕様ではありません。 その事例として、紹介します。

Python の「=」は代入文


 Python でも JavaScript等と同様に、変数への代入は「=」で行います。 また「+=」なども問題なく使用できます。

Python

i = 10    # i が 10 になる
i += 1    # i が 11 になる
 ただし、これらは演算子ではなく「代入文」という扱いです。 そのため値を返しません。

Python

i = j = 10      # i も j も 10 になる多重代入文
i = (j = 10)    # 構文エラー
 JavaScript などの代入演算子は、「設定する値を結果として返す」演算子であり、「変数への代入は副作用」とも言えます。 ここに、副作用を嫌う Python のこだわりを感じます。
 ただし、その後 「:=」という、代入演算子が導入されました。 バージョン3.8以降で有効です。
i = (j := 10)    # j が 10 になり、その結果を代入する i も 10 になる
 どうやら残念ながら(?)、嬉しいことに(?)、こだわりよりも利便性が優先されたようです。

Python の「++」「--」


 Python には「++」(インクリメント) と「--」(デクリメント)もありません。 やはり、副作用排除のこだわりでしょう。
 ただし、以下のようにエラーにすらならないので注意が必要です。 正直なところ、筆者のように、C言語系を基本として、Python を補助的に利用しているプログラマーにとっては厄介な仕様です。

Python

i = 10;
print( ++i )    # +(+i)と解釈して i は 10 のまま 10 を表示
print( --i )    # -(-i)と解釈して i は 10 のまま 10 を表示
# 以下参考(これはJavaScriptでも同様)
print( -+i )    # -(+i)と解釈して i は 10 のまま -10 を表示
print( +-i )    # +(-i)と解釈して i は 10 のまま -10 を表示
 なお i++i-- は構文エラーになります。
[PR]

マンガで感じる!本当の基礎から学ぶゲームプログラミングとは


 「マンガで感じる!本当の基礎から学ぶゲームプログラミング」シリーズでは、 主に、ゲーム開発を題材として、プログラミング時に筆者が脳内でイメージするコンピューター内部動作や本質を、マンガにてお伝えします。

プログラミングの本質をマンガで理解


 AI時代のプログラミングは、本質理解が重要です。 本質を理解していれば、あとはAIに任せて、自身を持って完成したプログラムに責任が持てるでしょう。
 そのため本シリーズでは、コーディングの実例や詳細よりも、「本質をイメージとして感じられること」を最優先としています。 まずマンガで、情報をできる限り絞り、プログラミングの仕組みやコンピューターの内部動作を、物理的に可視化してお届けします。
 そして文章の解説で徹底的に深堀りします。

登場人物紹介

【マンガで感じる】演算子 ~計算操作を行う記号~ 【本当の基礎から学ぶゲームプログラミング】[初心者向けゲーム開発入門] 登場人物 社長 クリスタル メカたち  マンガで感じる!本当の基礎から学ぶゲームプログラミングシリーズには、主に社長、クリスタル、およびメカたちが登場します。 ※実在の人物とは関係ありません

社長

 本シリーズの偉い人です。
 マンガでは、指示すなわち「要件定義」を行います。

クリスタル

 社長の指示を、メカを活用して解決します。
 名前は、コンピューター内部で指揮者の役割を果たす「水晶発振子」に由来します。

メカたち

 用途に応じて多数存在し、果たす役割がそれぞれ与えられています。
 クリスタルの指示に従い、ある時はプログラムの変数や関数のように、ある時は電子回路の素子のように振る舞います。

「マンガで感じる!本当の基礎から学ぶゲームプログラミング」にかける想い


 筆者が本シリーズにかける想いや、 より詳しいコンセプトは「マンガで感じる!本当の基礎から学ぶゲームプログラミング」にて語っています。 そちらもぜひご覧ください。

AIを専属の家庭教師にして演算子を学ぼう


 本記事では、使いこなすとプログラミングの幅が広がる「演算子」について解説しました。
 マンガを読んで興味が湧いた、解説のこのキーワードが気になった、などあれば、AIを専属の家庭教師に見立てて対話してみましょう。 各人の理解度に応じた質疑応答ができて、理解が深まりますので強くオススメします。
 本エピソードが、演算子およびゲームプログラミングの本質理解に少しでもお役に立てれば幸いです。

補足

  • 本記事に記載のプログラムソースコードは、悪意のない範囲で自由に使用・改変していただいて問題ありません。ただし、ご自身の判断と責任でお願いします。
  • 記事内容の検討および検証・添削に生成AIの Anthropic Claude と Google Gemini を利用しております。
  • 記事内の画像の作成に生成AIの Google Gemini を利用しております。
  • 画像内のラスタライズ文字フォントにOpen Font LicenseNoto Sans JapaneseZen AntiqueDotGothic16を使用しております。
  • 数式表現にMathJaxを使用しております。
  • ※各社の登録商標または商標について「®」「™」等の表記はしておりません。



カテゴリー:マンガで感じる!本当の基礎から学ぶゲームプログラミング,OXゲーム開発編
[PR]