"); //-->
记得上次跟一朋友讨论关于交换两变量的值而不用中间变量的值的问题时,我没仔细想就告诉他说不能实现,因为作为交换必须得有第三变量。其实,当时只是进入了一个误区,认为交换只能通过移动变量来实现。现在觉得有点不好意思了,毕竟发现自己学得不太踏实而且很不严谨。以下是关于变换两变量(而不用中间变量)的方法,其基本思想就是进行代数或逻辑上的变换和值累加得到。
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可编程逻辑控制器
嵌入式操作系统WinCE介绍
120-480W有源PFC AC/DC导轨电源—LIFxxx-20BxxR3
Protel 99 SE 视频教程 —— 第三节 库文件的操作
2026智能手机市场新拐点:成本压力下的价值重构
Bourns推出全新热跳线芯片系列 以紧凑尺寸实现高效散热表现
Protel 99 SE 视频教程 —— 第五节 创建PCB元器件
高压电源的主电路原理图
小体积、高效率,全国产化DC/DC电源模块——VRF24_DD-50WR4系列
systemview5
驳赵南元、方舟子(之一)
我的电子邮箱
尼得科电机(大连)荣膺科德汽车 “质量优胜奖”
15-75W AC/DC开板电源重磅发布—— LO-E-G系列
全球电子协会发布2025东亚区年度成果总结
IGBT软开关逆变式弧焊电源主电路
苹果、三星强势拉动,2025年Q4全球智能手机市场实现正增长
科幻作家不要帮倒忙
高效能、数智化 | 1300W非隔离通信电源KCR系列
Protel 99 SE 视频教程 —— 第六节 绘制PCB印制电路板(1)
SPCE061A在protel99下的PLCC封装库
PI调节器原理图
STEP7_v51编程中文手册
ZX7―315型弧焊电源工作原理图
前沿工程:2026年值得关注的AI与无线趋势
高压电源的系统框图
Spectra 9.03
Protel 99 SE 视频教程 —— 第七节 绘制PCB印制电路板(2)
Protel 99 SE 视频教程 —— 第四节 生成网络表文件