【C语言】互换两个变量的值而不借助其它变量

在C语言中互换两个变量的值而不借助中间变量。

 

一、算术运算法

 

代码实现:

#include <stdio.h>

void main()

{

    int a = 10, b = 12;

    a=b-a;    //执行后a=2,b=12

    b=b-a;    //执行后a=2;b=10

    a=b+a;    //执行后a=12;b=10

}

 

解析思路:

    将算术的运算过程理解成计算坐标轴上的两个点坐标。

    

    代码执行的三条语句:

  1. 计算B点到A点之间的距离L,储存在变量a中;

  2. 计算A点到原点的距离(即原先A点坐标),储存在变量b中,此时完成把a的值传给b;

  3. 计算B点到原点的距离(即原先B点坐标),储存在变量a中,此时完成把b的值传给a。

 

 

二、位运算

 

代码实现:

#include <stdio.h>

void main()

{

    int a = 0x05, b = 0x0C;

    a = a^b;

    b = a^b;

    a = a^b;

}

解析思路:

    位运算使用的是XOR(异或)的运算符。对运算中的两个数进行逐bit运算,对于每个bit的运算结果,不同为“1”,相同为“0”。

    代码执行的三条语句:

  1. 计算a和b异或的结果储存在a中;

  2. 此时a中存的值再与b异或,得到的结果就是最初a的值,储存在b中;

  3. 最后再用a存的值与b异或,得到的结果就是最初b的值。


 

 

更多技术干货分享,敬请关注微信公众号:DigCore

或者扫码关注公众号

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值