2007-03-02

交换两个int值的最短代码

CSDN上的帖子http://community.csdn.net/Expert/TopicView3.asp?id=4899577

比较好的是它着重考虑了“极端情况”----防止溢出

总结起来有如下几个
a^=b^=a^=b;
b=a+(a=b)*0;
a=b|a&~(b=a);
这三个在C#下应该都行,但是在C++下只有第一个行

原因是C#和C++对表达式求值顺序上不同,
如a=f(i)+g(i++)+h(i);中f,g用的都是i旧值,h则用的新值,C++则是未应义。
又如c=a+(a=1);C#中c应该是a旧值加1,C++则是2
C#中一个表达式中一个变量取值是按照从左至右的,C++则是按运算优先级的。

我觉得还是C#的顺序比较好,不过用C++多了总觉得它怪怪的。
另外C++未定义的那个太不好了,据说是因为编译器先于标准出现

No comments: