2013-08-23 60 views
-4

我想知道是否有任何其他方式交换一行中的2个数字,当然没有第三个变量。如何在C中的一行中交换两个变量?

我知道这样做的一种方法:

b=a+b-(a=b) 

a=a+b-(b=a) 

都是相同的(约)。如果你知道,那么请帮助我。

+1

你为什么要这样做?为了避免使用第三个变量,使代码不可读取 –

+0

'a/= b =(a = a * b)/ b;'乘法和除法而不是加法和减法? –

+0

您的两个示例方法都会在C中调用未定义的行为,因为您正在修改变量并在同一表达式中使用其值。 – verbose

回答

-1

使用位操作的C.下面的交换两个变量:

if (a != b) { 
    a ^= b ^= a ^= b; 
} 
+5

这是未定义的行为,因为同一个变量被修改了两次。 –

7

经常引用您可能寻找经典的回答是:

a^=b^=a^=b; 

,它在技术上是错误的,因为它在一个序列点之前多次改变相同的变量。

相关问题