题目
编写程序演示使用异或位运算在不使用任何第三个变量的前提下交换两个整数变量的值。
输入格式:一行输入两个整数 a 和 b,以空格分隔。
输出格式:输出交换后的两个整数,以空格分隔,末尾换行。
数据范围与约定:-109 ≤ a, b ≤ 109。
思路与算法
1. 异或运算数学性质
异或运算满足交换律和结合律:x ^ x = 0,x ^ 0 = x。
2. 三步无变量交换法
执行步骤:
① a = a ^ b;
② b = a ^ b;(此时 b 变为原 a)
③ a = a ^ b;(此时 a 变为原 b)。
安全提醒:若两变量为同一内存(如 swap(&arr[i], &arr[i])),第一次操作会把自己置零,必须确保地址不重合。
完整程序
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int b = sc.nextInt();
// 异或无临时变量交换
a = a ^ b;
b = a ^ b;
a = a ^ b;
System.out.println(a + " " + b);
}
}运行示例
输入:
3 7输出:
7 3