2016/04/03 公開
・ビットシフト
ビットシフト(bit)とは、2進数を表現するビット(0と1の2つの値)の桁を左右のどちらかに指定回数だけずらすことです。
ビットシフトには、右にビットの並びをずらす右シフトと、左にずらす左シフトがあります。
①右シフト
すべてのビットを右にずらします。演算子は、">>"です。
下図は、bytet型(8bit)の78を右にシフトしている様子を表したものです。1回のシフトで最上位ビット(左端のビット)は必ず0になります。また、シフト前の最下位ビット(右端のビット)は、無くなります。
条件によって、1回の右シフトには2で割るのと同じ計算になります。2で割ったときの余りは切り捨てです。ここでの条件は、計算する値が整数型で、正の整数であることです。

②左シフト
すべてのビットを左にずらします。演算子は、"<<"です。
下図は、bytet型(8bit)の78を左にシフトしている様子を表したものです。1回のシフトで最下ビット(右端のビット)は必ず0になります。また、シフト前の最上位ビット(左端のビット)は、無くなります。
条件によって、1回の左シフトには2を掛けるのと同じ計算になります。ここでの条件は、計算する値が整数型で、正の整数であることです。 ただし、最上位ビットが1の場合にマイナスの値になるので、シフトの回数が多いとマイナスの値になってしまいます。

これを、Javaのソースコードにすると以下のようになります。
BitOperator.java ← クリックしてダウンロードページに移動
001: public class BitOperator { 002: public static void main( String[] args ) { 003: int a = 14; // 2進数 1110 004: int b = 5; // 2進数 0101 005: 006: int and = a & b; // AND 007: int or = a | b; // OR 008: int xor = a ^ b; // XOR 009: int not = ~a; // NOT 010: 011: //結果を表示 012: System.out.println( a + " AND " + b + " = " + and ); 013: System.out.println( a + " OR " + b + " = " + or ); 014: System.out.println( a + " XOR " + b + " = " + xor ); 015: System.out.println( "NOT " + a + " = " + not ); 016: } 017: }
出力結果
14 AND 5 = 4 14 OR 5 = 15 14 XOR 5 = 11 NOT 14 = -15
ここからは、このソースコードを上から順番に解説していきます。
001: public class BitOperator {
クラス名を、BitOperatorとしています。
002: public static void main( String[] args ) {
このmainメソッドからプログラムを実行します。
003: int a = 14; // 2進数 1110 004: int b = 5; // 2進数 0101
このプログラムで演算に使うint型の変数aとbを宣言し、値を代入しています。
006: int and = a & b; // AND 007: int or = a | b; // OR 008: int xor = a ^ b; // XOR
009: int not = ~a; // NOT
011: //結果を表示 012: System.out.println( a + " AND " + b + " = " + and ); 013: System.out.println( a + " OR " + b + " = " + or ); 014: System.out.println( a + " XOR " + b + " = " + xor ); 015: System.out.println( "NOT " + a + " = " + not );
最後に演算結果を表示しています。
■関連コンテンツ
2進数 | 2で繰り上がる数値表現 |
Javaの変数 | Javaで扱う変数について解説 |
色をARGB値に分解 | 色情報→ARGB |
■新着情報
2021.12.21 | 現在の日時を取得 | いまの年月日、時分秒? |
■広告
