异或运算符
/* ^的特点:a 异或 b 两次得到的还是 a。 */
class OperatorDemo{
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 Test{
public static void main(String[] args) {
int a = 10;
int b = 20;
a = a ^ b; //现在 a = 10 ^ 20
b = a ^ b; //因为上面a被重新赋值了,所以 b = 10 ^ 20 ^ 20; b = 10;位异或运算的特点。
a = a ^ b; //再来看 a,a 还是上面重新赋值的状态,b的值已经发生变化了。
//所以 a = 10 ^ 20 ^ 10;a = 20
System.out.println("a:"+a+",b:"+b);
}
}
/* 另外一种方案:使用相加减实现。 */
class Test{
public static void main(String[] args) {
int a = 10;
int b = 20;
a = a + b; //现在 a = 10 + 20
b = a - b; //因为上面a被重新赋值了,所以 b = 10 + 20 - 20; b = 10;
a = a - b; //再来看 a,a 还是上面重新赋值的状态,b的值已经发生变化了。
//所以 a = 10 + 20 - 10;a = 20
System.out.println("a:"+a+",b:"+b);
}
}
thanks~
还没有评论,来说两句吧...