C/C++培训
达内IT学院
400-996-5531
这篇文章讲述的是C++培训C 关于使用异或运算交换两数的值。达内C++培训班正在火热招生中,同学你要不要加入我们呐?在这里小编每天也会分享一下干货给大家。那么今天说道的就是C++培训课程中的章节。
C 关于使用异或运算交换两数的值
分类 编程技术
异或运算可以达到交换两数的目的,代码如下:
void swap(int &a, int &b)
{
a = a^b;
b = a^b;
a = a^b;
}
但不推荐使用这种方式,附上常用的临时变量方法对比说明。
临时变量方法:
void swap(int &a, int &b)
{
int tmp = a;
a = b;
b = tmp;
}
对于临时变量法,每次赋值只要读取一个变量的值到寄存器,然后再从寄存器写回到另一个变量中即可,前后涉及两次内存写入操作;但是对于异或运算操作,每次都需要读取两个数据到寄存器中,再进行运算操作,之后把结果写回到变量中,前后共需要三次内存写入操作。另外一点,异或操作的代码可读性差。
如果使用C语言实现上述两种方法,并用gcc编译器编译,可以使用命令 gcc -S swap.c 查看相应的汇编代码,临时变量法代码行数更少,另外使用 gcc 编译器时,用异或运算交换数组会出错,参见链接。
在不引入临时变量的基础上,交换两数的值还可以使用三次加减法,代码如下:
void swap(int &a, int &b)
{
a = a + b;
b = a - b;
a = a - b;
}
这种方式同样需要三次内存写入操作,同时代码可读性也较差。
最后附上两张三种方法编译后对应汇编代码对比图(平台:Ubuntu14.04,gcc 4.8.4),图中 swap1.c 文件对应临时变量法,swap2.c 文件对应加减方法,swap3.c 文件对应异或方法。可以看到,临时变量法编译出的汇编代码量最少即效率更高,加减法和异或方法的区别仅仅是计算方式不同而已,操作步骤是一致的。
图1: 临时变量法和加减法汇编代码对比,点击图片查看大图。
图2: 异或方法和加减法汇编代码对比
更多C++培训类相关知识敬请关注C++培训官网c.tedu.cn
免责声明:内容和图片源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容
填写下面表单即可预约申请免费试听!怕钱不够?可就业挣钱后再付学费! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!
Copyright © 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有
Tedu.cn All Rights Reserved