ビット演算とシフト演算

/******************************/
/* ビット演算子とシフト演算子 */
/*      coded by Y.Suganuma   */
/******************************/
import java.io.*;

public class Test {
	public static void main(String args[])
	{
		int y1, y2, z1, z2;
		int x1 = 0x00000031;
		int x2 = 0xfffffff2;
		int a = -3;
		int b = 3;
	/*
	         ビット演算子
	*/
		y1 = x1 & 0x0000000f;     // 下位4ビットの取り出し
		y2 = x2 & 0x0000000f;     // 下位4ビットの取り出し
		z1 = y1 ^ y2;             // 排他的論理和(和になっている)
		z2 = ~z1 + 1;             // −3に対する2の補数表現
		System.out.println("ビット演算子");
		System.out.println("   y1 " + Integer.toHexString(y1) + "(" + y1 +
                           ") y2 " + Integer.toHexString(y2) + "(" + y2 + ")");
		System.out.println("   z1 " + Integer.toHexString(z1) + "(" + z1 +
                           ") z2 " + Integer.toHexString(z2) + "(" + z2 + ")");
	/*
	         シフト演算子
	*/
		y1 = a << 3;              // 左に3ビットシフト(負)
		y2 = b << 3;              // 左に3ビットシフト(正)
		System.out.println("シフト演算子");
		System.out.println("   y1 " + Integer.toHexString(y1) + "(" + y1 +
                           ") y2 " + Integer.toHexString(y2) + "(" + y2 + ")");
		y2 = y1;
		y1 = y1 >> 3;             // 右に3ビットシフト(1/8倍)
		y2 = y2 >>> 3;            // 右に3ビットシフト(1/8倍,0をつめる)
		System.out.println("   y1 " + Integer.toHexString(y1) + "(" + y1 +
                           ") y2 " + Integer.toHexString(y2) + "(" + y2 + ")");
	}
}
		
  このプログラムは以下の結果を出力します.ビット演算子とシフト演算子の働きを十分理解して下さい.
	ビット演算子
	   y1 1(1) y2 2(2)
	   z1 3(3) z2 fffffffd(-3)
	シフト演算子
	   y1 ffffffe8(-24) y2 18(24)
	   y1 fffffffd(-3) y2 1ffffffd(536870909)
		

戻る