可能重复:
Swapping two variable value without using 3rd variable使用两个变量而不是三个交换?
我们
int a=4;
int b=7;
我可以互换这些编号S不使用第三个变量?
可能重复:
Swapping two variable value without using 3rd variable使用两个变量而不是三个交换?
我们
int a=4;
int b=7;
我可以互换这些编号S不使用第三个变量?
a=a+b;
b=a-b;
a=a-b;
课程的确切实施取决于您使用的编程语言,但请检查XOR swap。
用C的一个例子可能是
#include <stdio.h>
/* Swaps the content pointed to by a and b. The memory pointed to is
assumed non-overlapping! */
void swap(int* a, int* b)
{
*a = (*a)^(*b);
*b = (*a)^(*b);
*a = (*a)^(*b);
}
int main(int argc, char** argv)
{
int a = 4;
int b = 7;
printf("a=%d, b=%d\n", a, b);
swap(&a, &b);
printf("a=%d, b=%d\n", a, b);
return 0;
}
重要:作为Prasoon Saurav对问题本身的评论,this answer另一个问题比我更正确,看到它是非常重要的两个变量驻留在内存中不重叠的位置。我的例子不检查这一点。
当然:a,b = b,a
以各种编程语言工作。您可以使用xor trick。
a = a + b; // a = 11,b = 7
b = a-b; // a = 11,b4
a = a-b; // a = 7,b = 4
或
a = a * b;
b = a/b;
a = b/a;
但小心使用此方法,对于某些组合可能会出现上溢或下溢。
所有容易溢出/下溢与某些数字组合。 – dty 2010-09-23 12:07:31
当然是 - 请参阅gspr的答案。 – Hogan 2010-09-23 12:01:04
@Hogan很快意识到这一点,并改变了答案,对于混乱感到抱歉。 – fredley 2010-09-23 12:01:54
不适用于所有值 – 2010-09-23 12:02:19