/*
* 实现移位运算符的使用
* */
public class MoveBitTest{
public static void main(String[] args){
// 声明一个byte类型的变量并初始化
byte b = 13;
System.out.println("b = " + b);
// 13的二进制是:0000 1101 => 左移一位的结果是:0001 1010=>换算为十进制整数是:26
byte b1 = (byte)(b << 1);//向左移一个二进制位 自动提升为32位 int类型
System.out.println("b1 = " + b1);
System.out.println(b << 1); // 26 左移一位相当于当前整数的数值*2
System.out.println(b << 2); // 52 左移一位相当于当前整数的数值*4
// 13的进制是 : 0000 1101 => 右移一位的结果是: ... 0000 0110 => 换算为十进制整数是: 6
System.out.println(b >> 1); // 6 右移一位相当于当前整数的数值/2
System.out.println(b >> 2); // 3 右移一位相当于当前整数的数值/4
// 逻辑右移 对于非负数来说 逻辑右移和右移的效果一样
System.out.println(b >>> 2); // 3
/*
* TODO 实现位运算符的使用 &
* */
// 声明两个byte类型的变量并初始化
byte bb = 11;
byte bb1 = 13;
System.out.println("bb =" + bb);
System.out.println("bb1 =" + bb1);
// bb的二进制为: 0000 1011 bb1的二进制为 : 0000 1101
System.out.println(bb & bb1); // 同1为1 一0为0 按位与二进制为:0000 1001 => 转为十进制 9
System.out.println(bb | bb1); // 一1为1 同0为0 按位或二进制为:0000 1111 => 转为十进制 15
System.out.println(bb ^ bb1); // 按位异或 同0 异1 按位或二进制为:0000 0110 => 转为十进制 6
System.out.println( ~ bb); // 按位取反 同0 异1 按位或二进制为:1111 0100 => 转为十进制 6
// 二进制1111 0100转为十进制 => 先减1:1111 0011 =>按位取反:0000 1100 =>转为十进制:12 => 添加负号 -12
}
}