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

1楼3楼的都不错,我刚刚看到有人用异或a=a^b;b=a^b;a=a^b;这样做的有点不懂有谁能解释一下啊... 1楼3楼的都不错,我刚刚看到有人用异或a=a^b;
b=a^b;
a=a^b; 这样做的有点不懂有谁能解释一下啊
展开
 我来答
圣绿海0Y
2007-11-24 · 超过27用户采纳过TA的回答
知道答主
回答量:73
采纳率:0%
帮助的人:61.1万
展开全部
#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();
}

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

靠,我加了一句话就跑到下面来?不公平!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
qizhi0119
2007-11-24 · TA获得超过357个赞
知道小有建树答主
回答量:510
采纳率:0%
帮助的人:250万
展开全部
呵呵,大家的思维都不错嘛,
用异或怎么弄?我没想出来。留个话,留着下次回来看谁想出来了。嘿嘿
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jim小子
2007-11-24 · TA获得超过136个赞
知道小有建树答主
回答量:272
采纳率:0%
帮助的人:204万
展开全部
异或的意思是判断两个相应的位值是否为异,为异即值不同的话就取真值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
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
myqoo02
2007-11-24 · TA获得超过1068个赞
知道小有建树答主
回答量:286
采纳率:0%
帮助的人:134万
展开全部
#include <iostream>
using namespace std;
int main()
{
int a=100,b=3;
// 下面3句是关键
a=a+b;
b=a-b;
a=a-b;
printf("%d %d\n",a,b);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式