【C语言】不使用第三个变量,交换两个变量的值

1. 前言

众所周知,要交换两个变量的值,最简单的方式就是使用临时变量。

#include<stdio.h>

int main()
{
    int a = 3, b = 5;// 要交换的两个变量
    
    int c;           // 声明第三个变量

    c = a;           // c = 3
    a = b;           // a = 5
    b = c;           // b = 3
    
    // 这样就成功交换了两个变量的值

    return 0; 
}

但是,如果要在不使用第三个变量的前提下,交换两个变量的值,又该怎么做呢?

2. 第一种方法

#include<stdio.h>

int main()
{
    int a = 3, b = 5;// 要交换的两个变量
    
	a = a + b;// a = 3 + 5
	b = a - b;// b = 3 + 5 - 5 = 3
	a = a - b;// a = 3 + 5 - 3 = 5
	
    // 这样就成功交换了两个变量的值

    return 0; 
}

这种方法有溢出的风险(a + b 或 a - b 的值超出 int 的范围)。

3. 第二种方法

异或:相异得1,相同得0。

比如 a = 3, b = 5 :
a 转换为二进制就是 00000000000000000000000000000011 ;
b 转换为二进制就是 00000000000000000000000000000101 ;
a 异或 b 的结果就是 00000000000000000000000000000110 ;

异或运算的重要性质
1.a ^ a = 0
2.a ^ 0 = a
3.满足交换律

本题解法如下:

#include<stdio.h>

int main()
{
    int a = 3, b = 5;// 要交换的两个变量
    
	a = a ^ b;		 // a = 3 ^ 5 
	b = a ^ b;		 // b = 3 ^ 5 ^ 5 = 3
	a = a ^ b;		 // a = 3 ^ 5 ^ 3 = 5
	
    // 这样就成功交换了两个变量的值

    return 0; 
}

异或运算不会进位,所以不用考虑溢出的问题。

  • 14
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值