この記事の目次
1. 演算子(Basic Operators)
● 算術演算子
主に数学的な演算を行う演算子です。
演算子 | 概要 | 例 |
---|---|---|
+ | 加算 | 1 + 2 |
- | 減算 | 2 – 1 |
* | 乗算 | 2*2 |
/ | 除算 | 4.0 / 2 |
% | 剰余 | 5 % 2 (結果:1) |
+ | 文字列の連結 | “A” + “B” (結果:AB) |
++ | インクリメント | x = 1;x++;(結果:2) |
– – | デクリメント | x = 1;x– –;(結果:0) |
注意 : インクリメント/デクリメント演算子
package helloworld; public class HelloWorld { public static void main(String[] args) { int x = 1; int y = x++; System.out.println("yは" + y); // 結果:yは1 int a = 1; int b = ++a; System.out.println("bは" + b); // 結果:bは2 } }
● 代入演算子
代入演算子は変数に値を代入する演算子です
主な代入演算子:
演算子 | 概要 | 例 |
---|---|---|
= | 右辺の値を左辺に代入 | i = 1; |
+= | 右辺の値を加算した結果を代入 | i += 5 (結果:10) |
-= | 右辺の値を減算した結果を代入 | i -= 5 (結果:0) |
*= | 右辺の値を乗算した結果を代入 | i *= 5 (結果:25) |
/= | 右辺の値で除算した結果を代入 | i /= 5 (結果:1) |
%= | 右辺の値で除算した余りを代入 | i %= 5 (結果:0) |
&= | 右辺の値で論理積演算した結果を代入 | i &= 10 (結果: 0) |
|= | 右辺の値で論理和演算した結果を代入 | i |= 10 (結果:15) |
^= | 右辺の値で排他的論理和演算した結果を代入 | i ^= 10 (結果:15) |
<<= | 右辺の値だけ左シフトした結果を代入 | i <<= 3 (結果:40) |
>>= | 右辺の値だけ右シフトした結果を代入 | i >>= 10 (結果:0) |
>>>= | 右辺の値だけ右シフトした結果を代入 | i >>>= 10 (結果:0) |
● 比較演算子
左辺と右辺の値を比較し、その結果をtrue/falseで返します。
主な比較演算子:
演算子 | 概要 | 例 |
---|---|---|
== | 左辺と右辺が等しければtrue | 5 == 5 (結果:true) |
!= | 左辺と右辺が等しくなければtrue | 5 != 5 (結果:false) |
< | 左辺が右辺より小さければtrue | 5 < 7 (結果:true) |
<= | 左辺が右辺以下であればtrue | 5 <= 3 (結果:false) |
> | 左辺が右辺より大きければtrue | 7 > 5 (結果:true) |
>= | 左辺が右辺以上であればtrue | 5 >= 7 (結果:false) |
?: | 「条件式 ? 式1 : 式2」。条件式がtrueなら式1、falseなら式2 | i = (0 >= 1) ? 2 : 3 (結果:iの値は3) |
package helloworld; public class HelloWorld { public static void main(String[] args) { int firstVariable, secondVariable; firstVariable = 1; secondVariable = 2; System.out.println(firstVariable + " == " + secondVariable + "の比較:" + (firstVariable == secondVariable)); System.out.println(firstVariable + " != " + secondVariable + "の比較:" + (firstVariable != secondVariable)); System.out.println(firstVariable + " > " + secondVariable + "の比較:" + (firstVariable > secondVariable)); System.out.println(firstVariable + " >= " + secondVariable + "の比較:" + (firstVariable >= secondVariable)); System.out.println(firstVariable + " < " + secondVariable + "の比較:" + (firstVariable < secondVariable)); System.out.println(firstVariable + "<=" + secondVariable + "の比較:" + (firstVariable <= secondVariable)); } }
● 論理演算子
複数の条件式を論理的に結合し、その結果をtrue/falseで返します。
主な論理演算子:
演算子 | 概要 | 例 |
---|---|---|
&& | 左辺右辺がともにtrueの場合はtrue | true && false (結果:false) |
|| | 左辺右辺どちらかがtrueの場合はtrue | true || false (結果:true) |
! | 式がfalseの場合はtrue | !false (結果:true) |
^ | 左辺右辺いずれかがtrueで、かつ、ともにtrueでない場合にtrue | true^false (結果:true) |
package helloworld; public class HelloWorld { public static void main(String[] args) { int firstNumber = 8; int secondNumber = 12; System.out.println("(firstNumber < 10) && (secondNumber < 10)の結果は " + ((firstNumber < 10) && (secondNumber < 10))); // Toán tử AND System.out.println("(firstNumber < 10) || (secondNumber < 10)の結果は " + !((firstNumber < 10) || (secondNumber < 10))); // Toán tử OR } }
実行結果:
説明:
firstNumber = 8、secondNumber = 12なので、この順に解釈していきます:
(firstNumber < 10) && (secondNumber < 10)
→ (8 < 10) && (12 < 10)
→ TRUE && FALSE
→ FALSE
!((firstNumber < 10) || (secondNumber < 10))
→ !((8 < 10) || (12 < 10))
→ !(TRUE || FALSE)
→ !TRUE
→ FALSE
● ビット演算子
整数を2進数で表した時、それぞれの桁を論理演算し、その結果を返します。
主なビット演算子
演算子 | 概要 | 例 |
---|---|---|
& | 論理積。左右双方の式にセットされているビット | 10 & 2 (結果:2) |
| | 論理和。左右いずれかの式にセットされているビット | 10 | 2 (結果:10) |
^ | 排他的論理和(EXOR演算) | 10^2 (結果:8) |
<< | ビットを左シフト | 10 << 2 (結果:40) |
>> | ビットを右シフト | 10 >> 2 (結果:2) |
>>> | ビットを右シフト、左端は0埋め | 10 >>> 2 (結果:2) |
● キャスト演算
キャスト演算はオペランドの型を変える演算であり、単項演算の一種です。この演算を行う式は:
(型)式
説明:
package helloworld; public class HelloWorld { public static void main(String[] args) { double pi = 3.1; double p = (int)(pi + 3.1); // (int)(pi + 3.1) -> (int)(6.2) -> 6 double q = (int)pi + 3.1; // (int)pi + 3.1 -> 3 + 3.1 -> 6.1 System.out.println("p は " + p); System.out.println("q は " + q); } }
実行結果:
2. 演算子の優先順位
以下に、優先順位の高いものからまとめます。
演算子の種類 | 演算子 |
---|---|
式 | ( ) [ ] . |
単項演算子 | ! ~ ++ -- (キャスト) (右から評価する) |
剰余 | * / % |
加減 | + - |
シフト | << >>> >> |
比較 | < <= > >= |
等値、非等値 | == != |
論理積(ビット演算子) | & |
排他的論理和(ビット演算子) | ^ |
論理和(ビット演算子) | | |
論理和(ビット演算子) | | |
論理積 | && |
論理和 | || |
条件演算子 | ? : |
代入演算子 | = += -= *= /= %= <<= >>>= >>= &= ^= |= (右から評価する) |
注意:演算子の優先順位を正確に覚えることは難しいだろうと思います。複雑な式では、適宜、塊を丸かっこで括るようにしましょう。丸かっこで括られた部分は優先して演算されます。
3. 総合問題例
半径rをキーボードから入力して、球の体積と表面積を計算し、小数点第3位まで四捨五入した結果を出力するプログラムを作れ。
回答:
package helloworld; import java.text.DecimalFormat;//四捨五入ようのDecimalFormatクラスのimport import java.util.Scanner; //Scannerクラスのimport public class HelloWorld { public static final float PI = 3.14f; //PI定数を宣言する public static void main(String[] args) { //Scannerクラスのインスタンスを作成する Scanner scanner = new Scanner(System.in); // 四捨五入のために、DecimalFormatのインスタンスを作成する DecimalFormat decimalFormat = new DecimalFormat("#.##"); System.out.println("球の半径 r : "); float radius = scanner.nextFloat(); //情報を取得して、 radius変数に代入する // 球の表面積を計算する float area = 4 * PI * radius * radius; System.out.println("球の表面積 = " + decimalFormat.format(area)); // 球の体積を計算する float vol = (float)4/3 * PI * radius * radius * radius; System.out.println("球の体積 = " + decimalFormat.format(vol)); } }
実行結果:
4. まとめ
ここまで、算術演算子、代入演算子、比較演算子などのJAVAの基本演算子を紹介しました。
プログラムを上手く処理させるように、演算子、演算子の優先順位、結合則などを理解し、演算問題をたくさん練習する必要があります。ぜひ、Java-基礎な知識カテゴリーの総合演習問題をご覧ください。
5. 演習問題
JAVAの基本演算子の演習問題