题目
编写程序演示使用异或位运算在不使用任何第三个变量的前提下交换两个整数变量的值。
输入格式:一行输入两个整数 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])),第一次操作会把自己置零,必须确保地址不重合。
完整程序
#include <stdio.h>
int main(void)
{
int a, b;
if (scanf("%d %d", &a, &b) != 2) {
return 1;
}
// 异或位运算交换两变量(必须保证 a 和 b 不指向同一内存地址)
a ^= b;
b ^= a;
a ^= b;
printf("%d %d\n", a, b);
return 0;
}运行示例
输入:
3 7输出:
7 3