バナー画像

演算子はプログラムを組む上で必ず使います。

ですから演算子についての知識というのは基本中の基本なのですが、まだ学習を始めたばかりの方にとっては結構忘れがちなものやあまり理解できていないものもあると思います。

そこで今回はこの演算子についておさらいも踏まえて解説していきます。

演算子とは

プログラムには沢山の演算子が使われています。計算はもとより、左辺と右辺を比較する場合や一定の条件に合致するか否か、また、変数への代入時などなど。

中でも一番理解し易く馴染みの深い演算子は恐らく計算につかう演算子でしょうか。

小学生の頃に習った算数にも演算子は沢山使われています。何のことかというと、足し算や引き算といった四則計算に使われている記号のことです。

プログラムではこれらの計算の他にも文字列の結合やデータの参照など色々な部分で演算子を使います。

演算子の種類

演算子にはいくつかの種類が存在します。

まずはどのような種類があるのかについて見てみましょう。

演算子の種類
  • 算術演算子
  • 代入演算子
  • 比較演算子
  • 論理演算子
  • ビット演算子

これらの詳細は後述しますが、こうやって見るだけでも色々な種類の演算子が使われていることがわかります。

ただこれらの中には、馴染みの深いものや説明を読めばすぐに理解できるものが多くありますので、学習を始めてあまり時間が経っていない方も身構える必要は全くありません。

こういった種類があるんだなという程度で覚えておいてください。

次からはこれらの演算子をコードも踏まえながら詳細に解説していきたいと思います。

算術演算子

これは基本中の基本であり、これを理解できていないというのであればプログラムは絶対に組めないと思った方が良いでしょう。

まずはこの部分のおさらいも踏まえてどのようなものがあり、どういった形で利用するのかについて解説します。

加算

足し算のことです。プラス記号(+)を使って数値を足すほかに、文字列と文字列を結合させる場合にも使います。

減算

引き算のことです。マイナス記号(-)を使って計算をします。
加算では文字列も扱えましたが、減算では文字列を扱えません。
もし文字列から1文字削除したいというのであれば、それ専用のメソッドを使うことになります。

乗算

掛け算のことです。パソコンでは一般的な掛け算の記号(×)は無いのでアスタリスク(*)が掛け算の記号に割り振られています。

除算

割り算のことです。こちらも一般的に使われている記号はありませんのでスラッシュ(/)が割り振られています。

注意すべき点としては、プログラミングの世界では単純に割り算をした場合、浮動小数点も余りも算出されません。

詳しくは後述しますが、例えばスラッシュ(除算に使う記号)を使って5割る3を計算すると返ってくる値は1となります。

剰余

割り算で割り切れない場合の余りのことです。プログラミングの世界ではパーセント(%)記号を使って計算します。

こちらも後述しますが、剰余計算をする場合の注意点としては、パーセント(剰余に使う記号)を使って計算する場合、剰余の部分しか返ってこないということです。

インクリメント・デクリメント

インクリメントとは数値を1ずつ足していくことで、デクリメントは逆に数値を1ずつ引いていくことを言います。
インクリメントはプラス(+)を二つ連続で記述し、デクリメントはマイナス(-)を二つ連続で記述することで作用します。
またこれら二つの演算子には前置形と後置形があり、前置形は1を加算または減算した後で変数に代入するのに対し、後置形は変数に代入した後で1を加算または減算します。
インクリメント及びデクリメントはループ処理で使われるケースが一般的です。

コードで記述

それでは今まで解説してきた記号を使って実際のコードで記述してみましょう。

public class Main {

	public static void main(String[] args) {
		int num1 = 5;
		int num2 = 3;
		int result;
		String str1 = "文字列";
		String str2 = "結合";
		String resultStr;
		
		// 加算
		result = num1 + num2;
		System.out.println("加算:" + result);
		// 文字列の結合
		resultStr = str1 + str2;
		System.out.println("結合:" + resultStr);
		// 減算
		result = num1 - num2;
		System.out.println("減算:" + result);
		// 乗算
		result = num1 * num2;
		System.out.println("乗算:" + result);
		// 除算
		result = num1 / num2;
		System.out.println("除算:" + result);
		// 剰余
		result = num1 % num2;
		System.out.println("剰余:" + result);
		// 前置インクリメント
		num1 = 5;
		result = ++num1;
		System.out.println("前置インクリメント:" + result);
		// 後置インクリメント
		num1 = 5;
		result = num1++;
		System.out.println("後置インクリメント:" + result);
		// 前置デクリメント
		num1 = 5;
		result = --num1;
		System.out.println("前置デクリメント:" + result);
		// 後置デクリメント
		num1 = 5;
		result = num1--;
		System.out.println("後置デクリメント:" + result);
	}

}

実行結果

加算:8
加算:8
結合:文字列結合
減算:2
乗算:15
除算:1
剰余:2
前置インクリメント:6
後置インクリメント:5
前置デクリメント:4
後置デクリメント:5

インクリメント・デクリメントをループ処理で使う場合は以下のように記述します。

public class Main {

	public static void main(String[] args) {
		String arr[] = {"red", "green", "blue"};
		for (int num = 0; num < arr.length; num++) {
			System.out.println("this color is " + arr[num]);
		}
	}

}

実行結果

this color is red
this color is green
this color is blue

代入演算子

代入演算子は名前の通り、変数に文字や数値を代入する場合に使う演算子です。

イコール(=)はプログラミングでもよく出てくる代入演算子の一つです。

数学の世界でも意味は同じで、x = 3 + 5という式は3に5を足した数をxに代入するという意味で使われているはずです。

それでは代入演算子にはどのようなものがあるのか見てみましょう。

代入

イコール(=)を使って表します。

加算して代入

プラス記号(+)とイコール(=)を連続で記述します。

減算して代入

マイナス記号(-)とイコール(=)を連続で記述します。

乗算して代入

アスタリスク(*)とイコール(=)を連続で記述します。

除算して代入

スラッシュ(/)とイコール(=)を連続で記述します。

余りを代入

パーセント(%)とイコール(=)を連続で記述します。

コードで記述

それでは今まで解説してきた記号を使って実際のコードで記述してみましょう。

public class Main {

	public static void main(String[] args) {
		int num;
		int result;
		// ①代入
		num = 3;
		result = 0;
		System.out.println("num = " + num);
		System.out.println("result = " + result);
		// 加算して代入
		result += num;
		// ①でnumに3を代入しているため、resultの数値も変わる
		System.out.println("result = " + result);
		// 減算して代入
		result -= num;	// この段階でnumは3となっている
		System.out.println("result = " + result);
		// 乗算して代入
		result = 5;		// resultに5を代入
		result *= num;	// この段階でnumは3となっている
		System.out.println("result = " + result);
		// 除算して代入
		result /= num;	// この段階でresultは15、numは3となっている
		System.out.println("result = " + result);
		// 剰余して代入
		result %= num;	// この段階でresultは5、numは3となっている
		System.out.println("result = " + result);
	}

}

実行結果

num = 3
result = 0
result = 3
result = 0
result = 15
result = 5
result = 2

比較演算子

比較演算子とは、左辺と右辺の数値が同じかどうか等の比較をする場合に使う演算子です。

左辺は右辺より大きい

左辺 > 右辺という形で記述します。

左辺は右辺より小さい

左辺 < 右辺という形で記述します。

左辺は右辺以上

左辺 >= 右辺という形で記述します。

左辺は右辺以下

左辺 <= 右辺という形で記述します。

左辺は右辺は等しい

左辺 == 右辺という形で記述します。

左辺は右辺は同じではない

左辺 != 右辺という形で記述します。

コードで記述

それでは今まで解説してきた記号を使って実際のコードで記述してみましょう。

public class Main {

	public static void main(String[] args) {
		int num_a = 5;
		int num_b = 3;
		String str_a = "Sample";
		String str_b = "Sample";
		
		// 左辺 > 右辺
		System.out.println(num_a > num_b);
		// 左辺 < 右辺
		System.out.println(num_a < num_b);
		num_a = 3;
		num_b = 3;
		// 左辺 >= 右辺
		if(num_a >= num_b) {
			System.out.println("num_a は num_b 以上");
		}
		// 左辺 <= 右辺
		if(num_a <= num_b) {
			System.out.println("num_a は num_b 以下");
		}
		// 左辺 == 右辺
		if(num_a == num_b) {
			System.out.println("num_a は num_b は同じ");
		}
		num_a = 4;
		// 左辺 != 右辺
		if(num_a != num_b) {
			System.out.println("num_a は num_b は同じではない");
		}
		// 文字列の比較にはequalsを使用しないと正確な比較が出来ないので注意!
		if(str_a.equals(str_b)) {
			System.out.println("str_a は str_b は同じ");
		}
		str_b = "sample";	// Sample → sample と変更(先頭大文字 → 先頭小文字)
		if(str_a.equals(str_b)) {
			
		} else {
			System.out.println("str_a は str_b は同じではない");
		}
	}

}

実行結果

true
false
num_a は num_b 以上
num_a は num_b 以下
num_a は num_b は同じ
num_a は num_b は同じではない
str_a は str_b は同じ
str_a は str_b は同じではない

if文を使わずそのままprintln()で表示させるとBoolean型として「true/false」で返ってきます。

また文字列の比較にはequalsメソッドを使わないと正しい比較が出来ないので注意してください。

論理演算子

真偽の比較のための演算子のことです。結果はtrue/falseで返ってきます。

aかつbがtrueの場合

アンパサンド(&)を続けて二つ記述します。aとbが両方真の場合にtrueを返します。

aまたはbがtrueの場合

バーティカルバー(|)を続けて二つ記述します。aまたはbが真の場合にtrueを返します。

xがtrueではない場合

エクステンション(!)とイコール(=)を続けて記述します。xが真ではない場合にfalseを返します。

xとyのどちらか片方がtrueの場合

キャレット(^)を記述します。xとyのどちらか片方だけが真の場合にtrueを返します。

コードで記述

それでは今まで解説してきた記号を使って実際のコードで記述してみましょう。

public class Main {

	public static void main(String[] args) {
		int num1 = 2;
		int num2 = 4;
		// num1,num2が両方真の場合true
		System.out.println((num1 < 3) && (num2 > 3));
		// num1,num2どちらかが真の場合true
		System.out.println((num1 < 3) || (num2 > 3));
		// num1が真ではない場合true
		System.out.println(!(num1 > 3));
		// num1,num2どちらか一方だけが真の場合true
		System.out.println((num1 > 3) ^ (num2 > 3));	// num1は3より小さい為、trueが返ってくる
	}

}

実行結果

true
true
true
true

ビット演算子

ビット演算子は恐らくハードを直接触るようなプログラミングでしか使う場面が無いと思いますので、あまり見かけることはないと思います。

通信関係やバイナリファイルを扱うことがあるなら、この演算子に対する知識が必要というレベルで覚えておいてください。

abどちらにもセットされているビット

アンパサンド(&)を使って記述します。

aまたはbにセットされているビット

バーティカルバー(|)を使って記述します。

10進数のaをbビット左シフト

小なり(<)を二つ連続で記述します。

10進数のaをbビット右シフト

大なり(>)を二つ連続で記述します。

10進数のaをbビットを左右どちらかへシフト、シフトの逆側は0で埋める

大なりまたは小なりを3つ連続で記述します。シフトと違うところは、移動した桁数だけ0で埋めます。

10進数のaのビットを反転

チルダ(~)を使って記述します。
それでは今まで解説してきた記号を使って実際のコードで記述してみましょう。

public class Main {
	
    public static void main(String[] args) {

        byte b;
        byte x = 16;
        byte y = 32;
        byte z = 64;
        
        System.out.println(b = 0x55 & 0x0F);
        System.out.println(b = 0x55 | 0x0F);
        System.out.println("16を左に4ビットシフト:" + (x << 4));
        System.out.println("32を右に4ビットシフト:" + (y >> 4));
        System.out.println("64を右に4ビットシフトして0埋め:" + (z >>> 4));
        System.out.println("64のビットを反転:" + (~z));
    }
    
}

実行結果

5
95
16を左に4ビットシフト:256
16を右に4ビットシフト:2
128を右に4ビットシフトして0埋め:4
128のビットを反転:-65

まとめ

今回は演算子について出来るだけ具体的に解説してみましたが、いかがでしたか?

演算子はプログラムにおいて他のどんなものよりも使う場面が多いものですので、この記事を読んでしっかり学習することを強くお勧めします。

極論にはなりますが、プログラムはクラス毎のメソッド・その特徴と使い方、そして演算子さえきちんと理解できていれば、どんなプログラムでも悩むことなく作ることが出来ると言ってもいいでしょう。

そのためにも、まずはこういった基本的部分の理解度を出来る限り高めておくことが重要だと思います。

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。