专栏中心

EEPW首页 > 专栏 > 【转】C或C++中不用中间变量交换两变量的值

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

发布人:0750long 时间:2009-07-14 来源:工程师 发布文章
【转】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;

专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们

关键词:

相关推荐

SunyPLC300可编程逻辑控制器

120-480W有源PFC AC/DC导轨电源—LIFxxx-20BxxR3

Protel 99 SE 视频教程 —— 第三节 库文件的操作

视频 2010-01-19

2026智能手机市场新拐点:成本压力下的价值重构

Bourns推出全新热跳线芯片系列 以紧凑尺寸实现高效散热表现

Protel 99 SE 视频教程 —— 第五节 创建PCB元器件

视频 2010-01-19

小体积、高效率,全国产化DC/DC电源模块——VRF24_DD-50WR4系列

systemview5

资源下载 2007-02-09

尼得科电机(大连)荣膺科德汽车 “质量优胜奖”

全球电子协会发布2025东亚区年度成果总结

苹果、三星强势拉动,2025年Q4全球智能手机市场实现正增长

高效能、数智化 | 1300W非隔离通信电源KCR系列

Protel 99 SE 视频教程 —— 第六节 绘制PCB印制电路板(1)

视频 2010-01-19

STEP7_v51编程中文手册

前沿工程:2026年值得关注的AI与无线趋势

Spectra 9.03

Protel 99 SE 视频教程 —— 第七节 绘制PCB印制电路板(2)

视频 2010-01-19

Protel 99 SE 视频教程 —— 第四节 生成网络表文件

视频 2010-01-19
更多 培训课堂
更多 焦点
更多 视频

技术专区