【はじめてのJava】算術演算子その2と複合代入演算子【演算子編】
算術演算子
今回は「算術演算子」の続きを解説していきます。
前回記事はこちらです。
目次
算術演算子
除算
除算について解説していきます。
除算とは割り算のことです。演算子には「/」と「%」を使用します。ほかの演算と違い、除算の演算子が2種類あるのは、「商」と「余り」のどちらを求めた以下によって使用する演算子が異なるためです。
我々人間が割り算をした場合、多くの場合は「商」に注目し、「余り」に注目しないことが多くあります。例えば「1000円を3人で分けたら」と聞かれた場合を考えてみます。多くの人は「333円」という点に注目し、1円余ることにはさほど関心が向かないと思います。
これは割り算の「商」である「1人あたり333円」という方に注目しているためです。
しかし我々人間も「余り」に注目することもあります。例えば「偶数奇数」と言われたら「2で割った余り」で数字を偶数か奇数か判別していますし、「うるう年」と言われたら、4で割って余りが0の年※のことを指します。※厳密には違いますが、ここではうるう年の計算方法が重要なわけではないので触れません。
このように、割り算を行う場合は「商」に注目したい場合と「余り」に注目したい場合がありますが、Javaの演算ではどちらか1つの値しか求められません。
そこで「商」を求める場合は「/」演算子を、「余り」を求める場合(剰余演算)は「%」演算子を利用します。
除算(商を求める)
商を求める除算では演算子に「/」を使用し、左辺の値を右辺の値で割った商を結果として返します。
私たちが普段割り算の際に使用する「÷」の記号は使わないので注意しましょう。
例
int x = 10 / 2; //xに5が代入される。 System.out.println(10 / 5); //2が表示される。
剰余演算(余りを求める)
余りを求める演算(剰余演算)では演算子に「%」を使用し、左辺の値を右辺の値で割った余りを結果として返します。
日常生活で余りを求める場面は多くありませんが、プログラミングではよく利用します。(例:サイコロプログラム、素数判定プログラム、暗号化のアルゴリズムなど。)
こちらも、私たちが普段割り算の際に使用する「÷」の記号は使わないので注意しましょう。
例
int x = 10 % 3; //xに1が代入される。 System.out.println(10 % 4); //2が表示される。
サンプルソースコード
除算と剰余演算の処理を含んだソースコードとその実行結果を記載します。
ソースコード
class Sample{ public static void main(String[] args){ int x = 8 / 4; int y = 10 % 6; System.out.println("変数xの値は" + x + "です。"); System.out.println("変数yの値は" + y + "です。"); } }
実行結果
>java Sample
変数xの値は2です。
変数yの値は4です。
上記のソースコードではint型変数x,yに対して、それぞれ乗算、剰余演算子を用いた計算結果を代入し、その結果を出力しています。
変数yの値は、10を6で割った余りの4が出力されています。
算術演算子の説明は以上になります。
算術演算子まとめ
加減乗除の四則演算は馴染みがあり、普段と異なる記号を使用する点に注意すれば特に違和感なく使いこなせるでしょう。
剰余演算については、初めて見るため戸惑う方も多いかと思いますが、本文中で説明したように偶数奇数の判別に利用されます。
仕組みを説明すると、偶数は必ず2で割り切ることができる数なので、2で割った余りは必ず0になります。
また、奇数は2で割り切ることができない数なので、2で割った余りは必ず1になります。
この特性を利用して、ある値が奇数か偶数かを判別して処理を分岐させるといった動作が可能になります。
処理の分岐の記述法については後々別記事で解説していきます。
一見使い道の分からない剰余演算も、便利に使うことが出来るのでしっかりと覚えておきましょう。
複合代入演算子
複合代入演算子とは、代入演算子「=」に「+」や「-」などの演算子を組み合わせて使用する演算子です。
演算と代入
Javaでは変数を対象に演算を行っただけでは、変数の値は変化しません。演算結果を反映したい場合、以下のように代入演算子を利用して変数に代入する必要があります。
例
int x = 1; System.out.println(x); //1が表示される。 System.out.println(x + 1); //2が表示される。 System.out.println(x); //xの値は 1のまま変わっていない。 x = x + 1; //x + 1の結果をxに代入する(x自身が1増加する)。 System.out.println(x); //2が表示される。
このように、変数の値を演算によって変更したい場合は、代入演算子を利用して演算結果を代入するか、複合代入演算子を利用します。
複合代入演算子は、演算と代入をまとめて行ってくれます。
複合代入演算子と算術演算
以下に、複合代入演算子を利用して、変数に算術演算と代入を行う場合の記述例を示します。
複合代入 演算子 |
動作 | 記述例 | 書き換え |
---|---|---|---|
+= | 値を加算して代入する。 | x += 1 | x = x + 1 |
-= | 値を減算して代入する。 | x -= 1 | x = x – 1 |
*= | 値を乗算して代入する。 | x *= 2 | x = x * 2 |
/= | 商を求めて代入する。 | x /= 2 | x = x / 2 |
%= | 余りを求めて代入する。 | x %= 2 | x = x % 2 |
x += 1と記述した場合、x = x + 1と記述した時と同じ動作になります。
複合代入演算子はうまく利用することで読みやすいソースコードの記述に繋がります。
複合代入演算子は他の演算子(ビット演算子、ビットシフト演算子)でも利用可能です。
サンプルソースコード
複合代入演算子を利用したソースコードとその実行結果を記載します。
ソースコード
class Sample{ public static void main(String[] args){ int x = 1; int y = 1; int z = 2; int w = 10; int v = 10; System.out.println("before operation"); System.out.println(x); System.out.println(y); System.out.println(z); System.out.println(w); System.out.println(v); x += 1; y -= 2; z *= 3; w /= 3; v %= 7; System.out.println("after operation"); System.out.println(x); System.out.println(y); System.out.println(z); System.out.println(w); System.out.println(v); } }
実行結果
>java Sample
before operation
1
1
2
10
10
after operation
2
-1
6
3
3
ポイント
割り算(除算)で商を求める際には演算子は「/」を使用する。
割り算(除算)で余りを求める(剰余演算を行う)際には演算子は「%」を使用する。
演算で変数の値を変更する場合には「複合代入演算子」も利用可能。
次回の内容
次回は、インクリメントとデクリメントという演算子について解説してきます。
次回記事はこちら。
はじめてのJavaシリーズの記事一覧はこちら
シリーズ全記事一覧
環境構築編
プログラムの作り方編
データ型と変数編
演算子編