プログラミングの真髄!計算式と演算子

java Java

プログラミングでは、ほとんどの処理を計算を用いて行います。

そのため計算式は非常に重要なものとなっています。今回はこの計算式とそれに用いる演算子の解説をしていきます。

しっかり覚えて、これから始まる本格的なプログラミングの礎を築きましょう。

演算子とオペランド

まずはソースコードを見てください。

public class sample {

	public static void main(String[] args) {
		
		int a = 5;
		int b = 10;
		
		int c = a + b + 10;
		
		System.out.println(c);
		
	}
}

これは、aとbを足算してcに代入し、そしてcを出力するというものです。

このソースコードでの計算式は「c = a + b + 10」の部分です。なんだか数学で見たような式ですね。数学が苦手というあなた!ご安心ください。プログラミングで使う数学は学校で習う数学なんか理より断然簡単です。

さて、この式の意味はいったん後回しにして、演算子(オペレーター)とオペランドについて解説していきます。

どちらも聞いたことのない言葉ですね。でも意味はとっても単純です。

先ほどの「c = a + b + 10」の式で考えると、変数や数字である「a、b、c、10」がオペランド、「=、+」が演算子です。演算子は、言い方こそ慣れませんが、要は「+」「-」「×」「÷」などのことです。オペレーターは「操作者」という意味なので、演算子は値を操作するものと覚えればわかりやすいかもしれません。

オペランドに関してはこれといって明確な定義がないので、演算子じゃない方と覚えておきましょう。

演算子の仕組みと評価

ここからは演算子の解説をしていきます。演算子は先ほども書いたように、式の中で値を操作するものです。では具体的にどのように操作しているのでしょうか。

先の「c = a + b + 10」という式では、=と+という演算子が出てきていますね。「+」はいわずもがな足し算です。+を挟んで左と右の値を足し合わせるという演算子です。

では「=」はどうでしょう。おそらく「cはa+b+10の答えと等しい」などと考えると思います。ですが実際は少し違い、「cに右辺の値を代入する」という意味です。

ここであえて「右辺」と書いたのには理由があります。

Javaが計算式を実行することを「評価する」と言います。

そして、評価は特定のルールの下で行われます。

  1. 演算子は自身の左右の値にしか干渉できない
  2. 評価結果はそのまま次の演算子の評価に用いる値となる
  3. 演算子ごとの優先順位に従って評価する
  4. 演算子ごとの評価の方向に従って評価する

以上4つです。それぞれ解説をしていきます。

演算子は自身の左右の値にしか干渉できない

演算子を評価するとき、どの演算子でも自身の左右の値以外を扱うことはできません。

言葉じゃわかりづらいので例を出しましょう。

A = 10 + 20 ? 30

私たちがこの式を計算するとき、+の部分では10と20を足しますよね?20と30を足すことはないと思います。

では改めて考えるとなぜ20と30を足してはいけないのでしょうか。当然「+」という演算子が左右の値を足すという意味だからです。

何もこれに限らず、どんな演算子でも、自身の左右の値以外には干渉できません。

評価結果はそのまま次の演算子の評価に用いる値となる

例えばこのような式があったとします。

A = 5 + 10 ? 3

この式を私たちが計算するとき、どのようにするでしょうか。

まず5+10をして15。そこから3を引いて12となります。このとき5+10の計算の後私たちの脳内では式がこのように置き換わっています。

A = 15 ? 3

5+10は消滅して15に置き換わっている、というのがイメージできるでしょうか。

これと同じです。ある演算子が評価を終えると、評価した演算子と関係するオペランドは消滅し、評価した結果に置き換わります。

演算子ごとの優先順位に従って評価する

私たちは学校で、掛け算や割り算は足し算や引き算よりも先にする。とか、()で囲まれた部分は何よりも先に計算する。などと教わりました。

これはプログラミングでも同じです。例えば掛け算の演算子「*」は、足し算の演算子「+」よりも先に評価されます。また、()の中の演算子は先に評価されます。その他にも演算子ごとに優先順位が設定されていて、それに従って評価の順番が決定されます。

数字と数字の計算の場合、基本的には算数や数学の計算と全く同じですので困ることはないと思います。

さて、ひとまずここでよく使う「数字系の」演算子をまとめておきます。以下に挙げるものは全て覚えましょう。

  • 加算演算子「+」
    足し算をする演算子です。
  • 減算演算子「-」
    引き算をする演算子です。
  • 乗算演算子「*」
    掛け算をする演算子です。
  • 除算演算子「/」
    割り算をする演算子です。
  • 余剰演算子「%」
    余剰計算(あまりを求める)をする演算子です。
【余剰計算とは?】
余剰計算とは、整数で割り切れない割り算の際に小数点以下を求めずにあまりだけを出力するものです。例えば、10 % 4 = 2 となります。

代入演算子

続いては代入演算子です。代入演算子はすべての演算子の中で優先度が最低です。すなわち、必ず最後に評価されます。

代入演算子は少し考え方が特殊で、数学などと同じ様に考えると混乱しがちなものですので、順を追ってしっかり見ていきましょう。

public class sample {

	public static void main(String[] args) {
		
		int a = 5;
		a = a + 10;
		
		System.out.println(a);
		
	}
}

さて、まずは基本的な「=」です。

今まで何回も出てきましたが、今回は少し特殊です。aにa+10を代入しています。

実行後出力されるのは「15」です。どういう挙動をしているのか見ていきましょう。

  1. a = 5によりaに5が代入される。
  2. 次に、a = a+15 の評価が行われる。代入演算子は最後に評価されるので先にa+10を評価する。
  3. 前述の「評価結果はそのまま次の演算子の評価に用いる値となる」より、式は
    a = 15 となる。
  4. aに15が代入される。

したがって、15が出力されます。

続いて、「+=」です。これは「右辺と左辺を足して左辺に代入する」というものです。

言葉だけだとわかりづらいので例を見ていきましょう。

public class sample {

	public static void main(String[] args) {
		
		int a = 5;
		int b = 10;
		
		a += a + b + 10;
		
		System.out.println(a);
		
	}
}

実行すると30が出力されます。これも挙動を順を追って見ていきます。

  1. 前述の法則にのっとりまずa + bが評価され、15となる。式は
    a += 15 + 10 となる。
  2. 15 + 10が評価され、25となる。式は
    a += 25 となる。
  3. a + 25が評価される。この時点ではaは一切操作されていないため5であるから評価結果は30である。
  4. aに30が代入される。

イコールの左右に同じ文字が出てくるという状況は数学ではなかなかあり得ないので少し混乱しますが、やっていることはさほど難しくありません。実際に動作させてなれていきましょう。以下は、主な代入演算子の一覧です。

  • 加算代入演算子「+=」
    足し算をして、左辺に代入する演算子です。
  • 減算代入演算子「-=」
    引き算をして、左辺に代入するする演算子です。
  • 乗算代入演算子「*=」
    掛け算をして、左辺に代入するする演算子です。
  • 除算代入演算子「/=」
    割り算をして、左辺に代入するする演算子です。
  • 余剰代入演算子「%=」
    余剰計算(あまりを求める)をして、左辺に代入するする演算子です。

まとめ

演算子はプログラミングのベースであり、かつ真骨頂です。しっかり覚えて、これから始まる本格的なプログラミングの礎を築きましょう。