【C语言干货】面试 | 不使用临时变量实现两个整数的交换

题目:不使用临时变量实现两个整数的交换

代码

#include <stdio.h>

int main() {
    int a = 10;
    int b = 20;

    // 第一步:a = a ^ b;
    a = a ^ b;

    // 第二步:b = a ^ b;
    b = a ^ b;

    // 第三步:a = a ^ b;
    a = a ^ b;

    // 输出交换后的结果
    printf("a = %d  b = %d\n", a, b);

    return 0;
}

在这里插入图片描述

代码解释

在这里插入图片描述

这段代码通过三次位异或运算实现了两个整数的交换,而没有使用任何临时变量。让我们逐步分析这个过程:
第一步:a = a ^ b;
这一步将 a 和 b 进行异或运算,结果存储在 a 中。此时,a 包含了 a 和 b 的异或结果。
第二步:b = a ^ b;
这一步将新的 a(即 a^b)和原来的 b 进行异或运算,结果存储在 b 中。由于 abb 等于 a,所以 b 现在等于原来的 a。
第三步:a = a ^ b;
这一步将新的 a(即 a^b)和新的 b(即原来的 a)进行异或运算,结果存储在 a 中。由于 (ab)a 等于 b,所以 a 现在等于原来的 b。
异或运算的性质
异或运算符(^)具有以下性质,这些性质使得它非常适合用于交换变量:
交换律:a ^ b ^ b = a
结合律:(a ^ b) ^ b = a
自反性:a ^ a = 0
零元性:a ^ 0 = a
这些性质确保了通过三次异或运算,我们可以在不使用临时变量的情况下交换两个变量的值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值