2.29 位异或运算符的特点

/*
	^的特点:一个数据对另一个数据位异或两次,该数本身不变。
*/
class OperatorDemo2 {
	public static void main(String[] args) {
		int a = 10;
		int b = 20;
		
		System.out.println(a ^ b ^ b); //10
		System.out.println(a ^ b ^ a); //20
	}
}
/*
面试题:
	请自己实现两个整数变量的交换
*/
class OperatorTest {
	public static void main(String[] args) {
		int a = 10;
		int b = 20;

		System.out.println("a:" + a + ",b:" + b);
	
		//方式1:使用第三方变量(开发中用的)
		/*
		int c = a;
		a = b;
		b = c;
		System.out.println("a:"+a+",b:"+b);
		System.out.println("------------");
		*/
		
		//方式2:用位异或实现(面试用)
		//左边:a,b,a
		//右边:a ^ b
		/*
		a = a ^ b;
		b = a ^ b; //a ^ b ^ b = a
		a = a ^ b; //a ^ b ^ a = b
		System.out.println("a:"+a+",b:"+b);
		*/
		
		//方式3:用变量相加的做法
		/*
		a = a + b; //a=30
		b = a - b; //b=10
		a = a - b; //a=20
		System.out.println("a:"+a+",b:"+b);
		*/
		
		//方式4:一句话搞定
		b = (a + b) - (a = b); // b=30-20=10,a=20
		System.out.println("a:" + a + ",b:" + b);
	}
}


你可能感兴趣的:(2.29 位异或运算符的特点)