如何不引进第三个变量,交换2个整形变量的值

来源:百度知道 编辑:UC知道 时间:2024/05/22 06:09:17
1楼3楼的都不错,我刚刚看到有人用异或a=a^b;
b=a^b;
a=a^b; 这样做的有点不懂有谁能解释一下啊

异或的意思是判断两个相应的位值是否为异,为异即值不同的话就取真值1,否则就为假0。应用异或可以达到定位翻转:
1010
1111(^)
——————
0101
利用这个原理就可以达到那个效果。
假如a=3,b=4,想让他们值交换,用a=a^b,b=b^a,a=a^b就可以实现
a=011
b=100 ^
——————
a=111
b=100 ^
———
b=011
a=111 ^
——————
a=100
执行前两个赋值语句a=a^b,b=b^a,相当于b^(a^b).而b^a^b=a^b^b,b^b又等于0,所以因此b=a^0,b=3.
然后执行第三个语句,a=a^b,因为a=(a^b),b=(b^a^b),相当于
a=a^b^b^a^b,即a=a^a^b^b^b等于b。
a就等于b原来的值了。

就是说
a=a^b=111
b=b^a=100^111=011
a=a^b=111^011=100=3

呵呵,大家的思维都不错嘛,
用异或怎么弄?我没想出来。留个话,留着下次回来看谁想出来了。嘿嘿

#include "stdio.h"

main()
{ int a,b;
scanf("%d%d",&a,&b);
a=a-b;
b=a+b;
a=b-a;
printf("%d,%d\n",a,b);
getch();
}

呵呵,下面的兄弟用的加法,我用的减法。都可以。

靠,我加了一句话就跑到下面来?不公平!

#include <iostream>
using namespace std;
int main()
{
int a=100,b=3;
//