交换使用两个变量而不是三个?

时间:2010-09-23 11:55:29

标签: programming-languages

  

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

我们有

int a=4;
int b=7;

我可以在不使用第三个变量的情况下交换这些号码吗?

4 个答案:

答案 0 :(得分:3)

a=a+b;
b=a-b;
a=a-b;

答案 1 :(得分: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对另一个问题比我的更正确,因为这两个变量位于非重叠位置很重要在记忆中。我的例子没有检查这个。

答案 2 :(得分:1)

A = A + B; // A = 11,B = 7

B = A-B; //一个= 11,B4

A = A-B; // A = 7,B = 4

α= A * B;

B = A / B;

A = B / A;

但请注意此方法,某些组合可能会出现溢出或下溢。

答案 3 :(得分:0)

当然:a,b = b,a适用于各种编程语言。

在其他人中,您可以使用xor trick