/******************************/
/* ビット演算子とシフト演算子 */
/* 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 + ")");
}
}