您的位置:首页 > 其它

不使用临时变量的情况下,两个变量之间交换值的问题

2011-04-18 22:58 302 查看
这算是我的第一篇博客吧,O(∩_∩)O~今天偶然学习到一个小知识:

[原文如下:

目的是想交换a和b的值。
int a=30,b=40;
a=a+b-(b=a);
这种方法貌似是不行的,大家可以帮忙分析一下吗?
对于这种情况,有没有改正的好方法...]

在C++操作符中除了作用域解析操作符“::”外,“()”的优先级是最高的,所以肯定会先计算()里的,这样b先就等于30了,所以结果a=30,b=30。

如果改成:
a=30,b=40;
a=(a+b)-(b=a);
结果也是a=30,b=30。

原因是,仅当两个操作符被用于同一个操作数时,优先级和结合性规则才有效,如sum=3+4*5,而当出现下面这种情况时sum=20*5+24*6,优先级和结合性都没有指出应该先计算哪一个乘法,因为两个*操作符并没有用于同一个操作数。事实上,C++把sum=20*5+24*6这种先计算哪个乘法的问题留给了实现,让它来决定在系统中的最佳顺序。而最终,a=(a+b)-(b=a)类似于sum=20*5+24*6,所以a=(a+b)-(b=a)也无法确定会先计算哪一个(),最终也得不到想要的结果。

但是有一种比较巧妙的方法:

a = a^b;
b = a^b;
a = a^b;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: