一、练习一
题目要求:交换两个整数a,b的值,不允许使用临时变量。
思路:用异或运算符(^),一个整数a在异或另一个整数b两次以后所得的值还是整数a。
代码实现:
public class Exchange {
public static void main(String[] args) {
int a = 3;
int b = 5;
System.out.println("交换前,a = " + a + " b = " + b);
a = a ^ b;
b = a ^ b; // 等价于 b = a ^ b ^ b = a
a = a ^ b; // 等价于 a = a ^ b ^ a ^ b ^ b = b
System.out.println("交换后,a = " + a + " b = " + b);
}
}
结果如下:
二、练习二
题目要求:将一个二进制数整体取反 int a = 0b00101101。
思路:一个二进制数异或一个全为1的数即可全部取反。
代码示例:
public class Java01 {
public static void main(String[] args) {
int a = 0b00101101;
int b = a ^ 255;
System.out.println(Integer.toBinaryString(b));
}
}
结果如下: