2016.04.03
ビットシフト(bit shift)
はじめに
①右シフト
00101110(2進数) = 78(10進数) 00101110 >> 1 = 00000000 00000000 00000000 00010111 = 32bitの39(10進数)
偶数の右シフト
00000110(2進数) = 6(10進数) 00000110 >> 1 = 00000000 00000000 00000000 00000011 = 32bitの3(10進数)
奇数の右シフト
00000101(2進数) = 5(10進数) 00000101 >> 1 = 00000000 00000000 00000000 00000010 = 32bitの2(10進数)
②左シフト
00101110(2進数) = 78(10進数) 00101110 << 1 = 00000000 00000000 00000000 01011100 = 32bitの156(10進数)
Javaソースコード - 左右のビットシフト例
BitShift.java
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018
public class BitShift { public static void main( String[] args ) { // 変数aに代入 byte a = 78; // 右シフト1回 System.out.println( a >> 1 ); // 右シフト2回 System.out.println( a >> 2 ); // 左シフト1回 System.out.println( a << 1 ); // 左シフト2回 System.out.println( a << 2 ); } }
コンパイル ソースコードが「ANSI」の場合
C:\talavax\javasample>javac -encoding sjis BitShift.java
コンパイル ソースコードが「UTF-8」の場合
C:\talavax\javasample>javac BitShift.java
実行
C:\talavax\javasample>java BitShift
出力結果
39 19 156 312
ここからは、このソースコードを上から順番に解説していきます。
001
public class BitShift {
クラス名を、BitShiftとしています。
002
public static void main( String[] args ) {
このmainメソッドからプログラムを実行します。
003 004
// 変数aに代入 byte a = 78;
006 007
// 右シフト1回
System.out.println( a >> 1 );
変数aの値を右に1回シフトした値をprintlnメソッドでコンソール出力しています。
009 010
// 右シフト2回
System.out.println( a >> 2 );
変数aの値を右に2回シフトした値をprintlnメソッドでコンソール出力しています。
012 013
// 左シフト1回
System.out.println( a << 1 );
変数aの値を左に1回シフトした値をprintlnメソッドでコンソール出力しています。
015 016
// 左シフト2回
System.out.println( a << 2 );
変数aの値を左に2回シフトした値をprintlnメソッドでコンソール出力しています。
Javaソースコード - byteの左シフトを8回行う
BitShift1.java
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015
public class BitShift1 { public static void main( String[] args ) { // 変数aに1を代入 byte a = 0b00000001; // 左シフトを8回行う for ( int i = 0; i <= 8; i ++ ) { // 結果の出力 System.out.println( "シフト回数:" + i + " " + a ); // 左シフト a <<= 1; } } }
コンパイル ソースコードが「ANSI」の場合
C:\talavax\javasample>javac -encoding sjis BitShift1.java
コンパイル ソースコードが「UTF-8」の場合
C:\talavax\javasample>javac BitShift1.java
実行
C:\talavax\javasample>java BitShift1
出力結果
シフト回数:0 1 シフト回数:1 2 シフト回数:2 4 シフト回数:3 8 シフト回数:4 16 シフト回数:5 32 シフト回数:6 64 シフト回数:7 -128 シフト回数:8 0
ここからは、このソースコードを上から順番に解説していきます。
001
public class BitShift1 {
クラス名を、BitShift1としています。
002
public static void main( String[] args ) {
このmainメソッドからプログラムを実行します。
003 004
// 変数aに1を代入 byte a = 0b00000001;
006 007
// 左シフトを8回行う for ( int i = 0; i <= 8; i ++ ) {
008 009
// 結果の出力 System.out.println( "シフト回数:" + i + " " + a );
011 012
// 左シフト
a <<= 1;
変数aの値を左に1回シフトしています。
以上です。
関連コンテンツ
数値を2進数で表したときの各桁の「0」と「1」に対して演算を行えます。4種類の演算、AND(論理積)、OR(論理和)、XOR(排他的論理和)、NOT(否定)を詳しく説明しています。
2016.03.26