シフト演算子

シフト演算子とはプログラム言語が、開発者にバイナリーデータ(2進数表記)のビット処理を表現するためにビット演算子と共に用意された構文の1つです。

シフト演算子とは「シフト」の意味の通りバイナリーデータのビットデータを指定数分ずらします。

シフト演算子は、整数型(byte,short,int,long)に利用できます。

シフト演算子の構文

演算子 構文 説明
<< 変数x << シフト数 変数xの値を左にシフト数分ビットデータをずらします。
>> 変数x >> シフト数 変数xの値(符号付)を右にシフト数分ビットデータをずらします。
>> 変数x >> シフト数 変数xの値(符号無)を右にシフト数分ビットデータをずらします。

シフト演算子サンプル

論理演算子サンプル
    //-16を意味
    int a = -0b001_0000;
    int b = a < 4;
    int c = a >> 4;
    int d = a >>> 4;

    System.out.println( a );
    System.out.println( b );
    System.out.println( c );
    System.out.println( d );
		
出力結果
	-16
	-256
	-1
	268435455
		

左シフト

左シフト画像

左に1シフトさせると8桁が左に1桁ずつスライドします。

先頭1桁目は破棄されます。8桁目にbitのデフォルト値「0」が付与されます。

右シフト(符号有)

符号有右シフト画像

右に1シフトさせると8桁が右に1桁ずつスライドします。

先頭1桁目は、符号を示しその符号を維持します。「0(正数)」なら「0」、「1(負数)」なら「1」です。

8桁目はスライドされたことにより情報が破棄されます。

右シフト(符号無)

符号有左シフト画像

右に1シフトさせると8桁が右に1桁ずつスライドします。

先頭1桁目は、符号を維持しません。デフォルト値「0」が付与されます。

8桁目はスライドされたことにより情報が破棄されます。

利用用途は

AIなどの画像認識処理など高度な画像加工において、ビット処理及びシフト処理が利用されます。
wikipediaマスク_(情報工学)参照のこと
また、byte型自体がメモリやCPUの容量のシビアな環境(IoTなど)で利用されるケースが多いでしょう。
ビジネスシステムでは、ソースファイルにはまず出現しません。
情報処理やJCPの資格試験などには、毎年必ず数問出題されています。