演算子の種類と使い方①(四則演算と剰余)【ゼロから始めるJavaの基礎~その12~】
プログラムの中では様々な処理が行われます。計算などの処理を行う際に使用する記号のことをまとめて『演算子』と呼びます。
名前は聞いたことが無いかもしれませんが、普段皆さんが使っている『+(足す)』や『-(引く)』といった記号も演算子の1つです。馴染みがあるのは加減乗除の記号(+-×÷)かもしれませんが、プログラミングをする上ではもう少し多くの演算子を使えるようになる必要があります。
代表的な演算子
演算子 | 名称 | 演算子 | 名称 |
---|---|---|---|
+ | 加算、文字列連結 | > | より大きい |
- | 減算 | < | より小さい |
* | 乗算 | >= | 以上 |
/ | 除算 | <= | 以下 |
% | 剰余 | == | 等価 |
++ | インクリメント | != | 非等価 |
‐‐ | デクリメント | ! | 論理否定 |
思ったよりも種類が多かったでしょうか?それとも少なかったですか?私はこんな感じの表を本で初めて見たときはプログラミングの勉強をやめようかと思いました(笑)
ここで挙げた演算子の他にも演算子は存在しますが、ほかのトピックでほかの内容とともにご紹介しますので、今は上記の演算子の意味と使い方を見ていきましょう。
種類はありますが、既に知っている記号や意味を何となく連想しやすいものもあると思います。
使っているうちにいつの間にか覚えますので、覚えようと躍起になる必要ありません。今は『見たことがない』という状態から、『どっかで見た』状態になれれば十分です。
それではサンプルをまじえながら実際に動きを見ていきましょう。まずはおなじみの加減乗除からご紹介していきます。
四則演算の演算子
【サンプル】
// まずは変数を用意します
int num1 = 10;
int num2 = 2;
// 足し算(+)
int result1 = num1 + num2;
// 引き算(-)
int result2 = num1 - num2;
// 掛け算(*)
int result3 = num1 * num2;
// 割り算(/)
int result4 = num1 / num2;
// 結果を出力します
System.out.println(result1);
System.out.println(result2);
System.out.println(result3);
System.out.println(result4);
【実行結果】
上記のサンプルでは、数値の演算を行いました。
『+』は数値の加算の演算子だけではなく文字列の連結を行う『文字列連結』演算子としての使い方もできます。
また、計算結果は一度変数に代入してから出力する必要は無く、計算式を標準出力の引数に渡す(※System.out.println()の『()』内に記述する)こともできます。
【サンプル】
// 文字列を連結して出力する
String str1 = "計算結果は";
String str2 = "です。";
System.out.println(str1 + str2);
// 計算と文字列連結を行って出力する
int num1 = 10;
int num2 = 2;
System.out.println(str1 + (num1 + num2) + str2);
【実行結果】
1行目から5行目で、文字列を連結して出力しています。連結したい文字列を『+』でつなげるだけですので、特に難しいことはありませんね。
そして11行目では整数(int)型の変数の計算と、文字列連結を出力の命令文の中で行っています。実行結果からも分かるように、『10+2』の計算結果が文字列と連結されて出力されていますね。
異なるデータ型が連結されているので、違和感を感じている方もいるかもしれません。実は数値が文字列と連結される際は『自動的に文字列に変換されて連結される』という機能があります。次のサンプルを見てください。
【サンプル】
// 文字列を連結して出力する
String str1 = "計算結果は";
String str2 = "です。";
System.out.println(str1 + str2);
// 計算と文字列連結を行って出力する
int num1 = 10;
int num2 = 2;
System.out.println(str1 + num1 + num2 + str2);
【実行結果】
一見、何も変わりがないように見えますが、実行結果を見て『ムムッ?!』となったのではないでしょうか?(笑)
元のサンプルと、上記のサンプルで変わったのは11行目の『num1 + num2』という部分が括弧で囲まれているか、囲まれていないかの違いです。
算数と同じく、Javaにおいても計算の優先順位があり、足し算や引き算よりも早く掛け算、割り算が行われます。
加算の『+』演算子の場合は左から順に処理が行われますので、サンプルでまず加算(連結)が行われるのは『str1 + num1』の部分ですね。結果として『計算結果は10』という文字列になります。
『計算結果はじゅう』と読みたいところですが『10』は文字列に変換されていますので、もはや数値の『じゅう』ではなく、文字列の『いちぜろ』に変わっていると認識してください。
そして次に行われる処理は『計算結果は10 + num2』ですね。
どうしても『10と2』を足して、『12』にしてしまいたいところですが、『10』はもはや数値ではありません。
結果として『計算結果は10』という文字列に『2』が文字列として連結され、結果は『計算結果は102』となります。気持ち悪いですね(笑)
数値と文字列を連結する際には、意図せず順番を誤ってしまい、計算結果を出力したかったのに「訳の分からない文字列が出力された!」となってしまうこともありますので、順序には注意して記述することが必要です。
余りを求める演算子
皆さんにとっては『パーセント』を表す記号としてなじみのある『%』という記号は、Javaでは剰余を求める演算子として使われます。
剰余というのは、割り算をしたときに発生する余りのことです。サンプルを見てみましょう。
【サンプル】
int result1 = 10 % 3;
int result2 = 4 % 2;
int result3 = 10 % 6;
System.out.println(result1);
System.out.println(result2);
System.out.println(result3);
【実行結果】
サンプルの1、3、5行目で計算式の結果をそれぞれ『result1、 result2、result3』という変数に代入しています。今までは一度数値を変数に代入してから計算していましたが、今回のように計算式の結果をそのまま変数に代入することもできます。
剰余は用途がいまいち想像しづらいかもしれませんが、よくある例としてはプログラム内で変数の値が『偶数か奇数か』によって処理内容が変わるような場合に用いられます。剰余計算の結果が『1』となる場合は奇数、『0』となる場合は偶数として判断し、処理内容を変えるようなプログラミングをします。
このような条件によってい処理内容を変えるような構造を『分岐構造』と呼んだりしますが、これについては後のトピックで改めてご紹介します。
1を足す、1を引く(インクリメントとデクリメント)
『++(インクリメント)』、『–(デクリメント)』はそれぞれ『+1』、『-1』を行うための演算子です。
【サンプル】
int i = 5;
i++; // 『i = i + 1』と同じ意味
System.out.println(i);
i--; // 『i = i - 1』と同じ意味
System.out.println(i);
【実行結果】
サンプルではまず、『5』という値を持つ整数(int)型の変数を用意しています。そして3行目でインクリメント(++)を使用していますね。
コメントにも記述しましたが『i++』という記述をすると『++』を付与した変数に『1を足す』という処理がされますので、『i = i + 1』と記述した場合と同じ結果を得ることが出来ます。
『–』で記述されるデクリメントも同様に、付与した変数から『1を引く』という処理をします。
数式を記述することなく単純な計算が出来ますので、コードがスッキリして見えますね。
馴染みの無い記号だと思いますので、皆さんが最初から無理して使っていく必要はありません。むしろミスを招く原因になるという理由から、使用が推奨されない場面や現場もあります。
とはいえ、今後Javaを学んでいく上では避けられないお決まりのパターンの中で使うことになりますので、『++は付与された変数に1を足す。–は1を引く。』ということだけは今のうちに覚えておいてくださいね。
今回は一旦ここまでにして、残りの演算子の紹介は次回以降にしていきたいと思います。
今回の内容に追加で知っておきたいトピックとして、『複合代入演算子』という書き方と、『インクリメント、デクリメントの前置と後置のルール』というものがあります。
これらも今の段階では知っておくだけで構いませんが、いつかは出会うことになりますので、一度目を通しておくことをおすすめします。