Test5:位运算符
/* 笔记: day3_2(位运算符)
* 正数二进制->求反码->求补码(反码+1)->负数二进制
* 负数二进制->减1->求反码->正数二进制
*/
public class Test5{
public static void main(String[] args) {
// 左移:<< 3 << 2 = 12 -> 3 * 2 * 2 = 12 m << n -> m * 2的n次方
System.out.println(1 << 2); //4 1*2的2次方
System.out.println(3 << 3); //24 3*2的3次方
// 右移:>> 3 << 2 = 12 -> 3 * 2 * 2 = 12 m << n -> m * 2的n次方
//无符号右移:>>> 不管移动之后首位是0是1,移动后空位直接补0。 正数的无符号右移与正数的右移一致
System.out.println(8 >> 2); //2 8÷2的2次方
System.out.println(8 >>> 2); //2
System.out.println(-8 >> 2); //-2
System.out.println(-8 >>> 2); //1073741822 因为负数右移以后最前面补得是0不是1
//与运算:& 同位相与,都为1得1,不都为1得0
//或运算:| 同位相或,都为0得0,不都为0得1
//异或运算:^ 同位相异或,相同得0,不同得1
//反码:~ 把二进制的同位翻转,1变0,0变1
System.out.println(~12); //-13
}
}