
如何不引进第三个变量,交换2个整形变量的值
1楼3楼的都不错,我刚刚看到有人用异或a=a^b;b=a^b;a=a^b;这样做的有点不懂有谁能解释一下啊...
1楼3楼的都不错,我刚刚看到有人用异或a=a^b;
b=a^b;
a=a^b; 这样做的有点不懂有谁能解释一下啊 展开
b=a^b;
a=a^b; 这样做的有点不懂有谁能解释一下啊 展开
4个回答
展开全部
#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();
}
呵呵,下面的兄弟用的加法,我用的减法。都可以。
靠,我加了一句话就跑到下面来?不公平!
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();
}
呵呵,下面的兄弟用的加法,我用的减法。都可以。
靠,我加了一句话就跑到下面来?不公平!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
呵呵,大家的思维都不错嘛,
用异或怎么弄?我没想出来。留个话,留着下次回来看谁想出来了。嘿嘿
用异或怎么弄?我没想出来。留个话,留着下次回来看谁想出来了。嘿嘿
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
异或的意思是判断两个相应的位值是否为异,为异即值不同的话就取真值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
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 <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);
}
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);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询