题目
不用第三个变量交换两数(异或法)
思路
本题不用临时变量,用异或运算交换两整数(经典三行)。
a^=b; b^=a; a^=b; 可交换不同变量;若 a 与 b 是同一存储位置则失效,调用前须保证是两个变量。
解题分析
本题专门练异或交换。和临时变量、加减法一样,都能交换两整数,异或的约束是类型为整型且两变量地址不同。浮点、结构体请用临时变量。
若与第 5 题对照,建议同一组输入分别跑三种写法,看结果一致再理解差异。
完整程序
#include <stdio.h>
int main(void)
{
int a, b;
if (scanf("%d %d", &a, &b) != 2) {
return 1;
}
a ^= b;
b ^= a;
a ^= b;
printf("%d %d\n", a, b);
return 0;
}
运行示例
输入:
3 7输出:
7 3