题解 | 交换变量值
交换变量值
https://www.nowcoder.com/practice/bd243c9bef70492f91959cc5556546a8
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int a = scanner.nextInt();
int b = scanner.nextInt();
a = a ^ b;
b = a ^ b;
a = a ^ b;
System.out.println(a + " " + b);
}
}
核心逻辑总结
通过异或把 两个数的位差异 暂存到 a 里,再利用 “异或自己为 0、异或 0 为自己” 的性质,先把 b 还原成原来的 a,再把 a 还原成原来的 b,全程不需要临时变量。
举例:
假设:
- 原来的
a=苹果,b=香蕉; - 第一步:
a = 苹果^香蕉(把 “苹果和香蕉的差异” 存到a里); - 第二步:
b = (苹果^香蕉) ^ 香蕉→ 先算香蕉^香蕉=空(对应 0),再算苹果^空=苹果→b变成苹果; - 第三步:
a = (苹果^香蕉) ^ 苹果→ 先算苹果^苹果=空,再算香蕉^空=香蕉→a变成香蕉。
查看14道真题和解析