/*
运算符之五:位运算符:
结论:
1.位运算符作用的都是整形的数据
2.<<:在一定范围内,单位向左移一位,相当于*2(基于二进制的位数来平移)
: 在一定范围内,单位向右移一位,相当于/2(右移会先判断是正数还是负数,正数用0补,负数用1补)
面试题:最高效的方式计算2*8 ? 2<<3或者8<<1
*/
class BitTest{
public static void main(String[] args){
int i = 21;
//i = -21;
System.out.println("i << 2 :" + (i << 2));
System.out.println("i << 3 :" + (i << 3));
System.out.println("i << 27 :" + (i << 27));
int m = 12;
int n = 5;
System.out.println("m & n = " + (m & n));
System.out.println("m | n = " + (m | n));
System.out.println("m ^ n = " + (m ^ n));
//通过二进制底层的位运算来运算
//练习:交换两个变量的值
int num1 = 10;
int num2 = 20;
System.out.println("num1 = " + num1 + ",num2 = " + num2);
//方法一:
//int temp;
//temp = num1;
//num1 = num2;
//num2 = temp;
//方法二:
//num1 = num1 + num2;
//num2 = num1 - num2;
//num1 = num1 - num2;
//法三:异或,使用位运算符
num1 = num1 ^ num2;
num2 = num1 ^ num2;
num1 = num1 ^ num2;
System.out.println("num1 = " + num1 + ",num2 = " + num2);
}
}