2010-09-23 87 views

回答

3
a=a+b; 
b=a-b; 
a=a-b; 
+0

当然是 - 请参阅gspr的答案。 – Hogan 2010-09-23 12:01:04

+0

@Hogan很快意识到这一点,并改变了答案,对于混乱感到抱歉。 – fredley 2010-09-23 12:01:54

+0

不适用于所有值 – 2010-09-23 12:02:19

2

课程的确切实施取决于您使用的编程语言,但请检查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另一个问题比我更正确,看到它是非常重要的两个变量驻留在内存中不重叠的位置。我的例子不检查这一点。

0

当然:a,b = b,a以各种编程语言工作。您可以使用xor trick

1

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;

但小心使用此方法,对于某些组合可能会出现上溢或下溢。

+2

所有容易溢出/下溢与某些数字组合。 – dty 2010-09-23 12:07:31

相关问题