Programming languages 使用两个变量而不是三个变量进行交换?

Programming languages 使用两个变量而不是三个变量进行交换?,programming-languages,Programming Languages,可能重复: 我们有 int a=4; int b=7; 我可以不使用第三个变量交换这些编号吗?当然,精确的实现取决于您使用的编程语言,但是请检查 a=a+b; b=a-b; a=a-b; C语言中的一个例子是 #include <stdio.h> /* Swaps the content pointed to by a and b. The memory pointed to is assumed non-overlapping! */ void swap(int*

可能重复:

我们有

int a=4;
int b=7;

我可以不使用第三个变量交换这些编号吗?

当然,精确的实现取决于您使用的编程语言,但是请检查

a=a+b;
b=a-b;
a=a-b;
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;
}
#包括
/*交换a和b指向的内容。指向的内存是
假设不重叠*/
无效交换(int*a,int*b)
{
*a=(*a)^(*b);
*b=(*a)^(*b);
*a=(*a)^(*b);
}
int main(int argc,字符**argv)
{
INTA=4;
int b=7;
printf(“a=%d,b=%d\n”,a,b);
互换(a&b);
printf(“a=%d,b=%d\n”,a,b);
返回0;
}

重要:正如Prasoon Saurav对问题本身的评论,另一个问题比我的问题更正确,因为这两个变量必须位于内存中不重叠的位置。我的示例没有检查这一点。

当然:
a,b=b,a
在各种编程语言中工作

在其他情况下,您可以使用。

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


但使用这种方法时要小心,某些组合可能会出现溢出或下溢

当然可以,请看gspr的答案。@Hogan很快意识到了这一点,并改变了答案,抱歉混淆。@yang,你怎么说?@Guri Jeff是对的,这很容易溢出。XOR方法会更好。@fredley:我觉得有点悲哀的是,20亿加20亿等于40亿的事实在2010年仍然被认为是一个令人兴奋和奇特的特征。所有这些都有可能在某些数字组合中溢出/下溢。