题目

不用第三个变量交换两数(异或法)

思路

本题不用临时变量,用异或运算交换两整数(经典三行)。

a^=b; b^=a; a^=b; 可交换不同变量;若 ab 是同一存储位置则失效,调用前须保证是两个变量。

解题分析

本题专门练异或交换。和临时变量、加减法一样,都能交换两整数,异或的约束是类型为整型且两变量地址不同。浮点、结构体请用临时变量。

若与第 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