这段代码如何交换这两个数字?

时间:2012-11-06 17:18:56

标签: python c ruby math swap

  

可能重复:
  Swapping two variable value without using 3rd variable

我在Quora上遇到过这段代码。 对于C:

a^=b^=a^=b;

对于Ruby / Python:

a,b=b,a

2 个答案:

答案 0 :(得分:5)

a ^= b ^= a ^=b;

^是二进制XOR运算符。请注意,此代码具有未定义的行为:ab的值在两个序列点之间被修改两次。

答案 1 :(得分:4)

C示例使用了几个愚蠢的技巧来交换这两个数字,您可以在这个identical question中阅读。

Ruby / Python示例使用元组解包,这更加明智/可读。

更多细节:

C:这是没有第三个变量的大肆吹嘘的交换的变种,但是它不可读,具有未定义的行为(正如基里连科指出的那样)并且通常是一个坏主意。整数版本有引导溢出问题。在C ++中,只需使用std::swap(a,b),因为它才有用。编写交换方法时要特别注意的一件事是,你可能会两次传递相同的东西,特别是如果你在C中使用引用或指针。

Ruby / Python:使用a和b的值构造元组,并通过拆分匿名元组并分配单个变量值来解释对逗号分隔的变量列表的赋值。此方法使用“第三个变量”,即匿名元组。