C或C++中不用中间变量交换两变量的值

记得上次跟一朋友讨论关于交换两变量的值而不用中间变量的值的问题时,我没仔细想就告诉他说不能实现,因为作为交换必须得有第三变量。其实,当时只是进入了一个误区,认为交换只能通过移动变量来实现。现在觉得有点不好意思了,毕竟发现自己学得不太踏实而且很不严谨。以下是关于变换两变量(而不用中间变量)的方法,其基本思想就是进行代数或逻辑上的变换和值累加得到。

 

1.推荐方法:此方法仅用到了加法和减法,效率高,易理解。

1)函数:

void swap(int &a,int &b)

{

a+=b;

b=a-b;

a=a-b;

}

2)宏定义:

         #define swap(a,b) a+=b;b=a-b;a=a-b;

2.异或方法:此方法效率也高,但是不易理解(要理解它记住异或的特性就是:连续跟同一个数异或两次则得到它本身。

1)函数定义

void swap(int &a,int &b)

{

a=a^b;

b=a^b;         //此式相当于a连续跟b异或两次

a=a^b;         //此式相当于b连续跟a异或两次

}

2)宏定义:

#define swap(a,b) a="a"^b;b=a^b;a=a^b; 或者

#define swap(a,b) a^=b^=a^=b  //此式的理解不难,^=从右到左分解即同上式。

3.带乘除的方法:此方法不推荐,因为乘除比较耗时间,物别是除法(计算机组成原理上有讲)

         (1)函数实现

void swap(int &a,int &b)

{

a=a+b;

    b=a-2*b;

    a=(a-b)/2;

    b=a+b;

}

         (2)宏定义:

#define swap(a,b) a="a"+b;b=a-2*b;a=(a-b)/2;b=a+b;

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值