黑马程序员技术交流社区

标题: 关于两变量值交换不借助第三方变量的方法问题 [打印本页]

作者: 刘冠杰    时间: 2011-12-26 18:12
标题: 关于两变量值交换不借助第三方变量的方法问题
在传智播客视频基础上曾看到的1道题,是关于两变量值交换的问题,当时老师给出的方法是借助一个第三方变量,用例如下:
int a=10;
int b=5;
int temp;

temp=a;
a=b;
b=temp;

Console.WriteLine("a={0} b={1}",a,b);
这种方法显然是很容易实现的,但由于以前在公司笔试的时候,曾经见过1个题目的要求是在不借助第三方变量的情况下交换两变量的值,于是就去网上搜索了一下此种要求的解决方法,然后搜索到两种方法:

方法一:利用+

a += b;
b = a - b;
a -= b;
显然这种方法也很简单,刚开始把a+b的值赋给了a;然后从a的值中减去b,从而使b的值为原本a的值;再从a中减去b的值(相当于原本a的值),使a得到原本b的值;从而在不借助第三方变量的情况下达到了两变量值互换的要求。

方法二:利用^

a ^= b;
b ^= a;
a ^= b;
这种方法就不解了,求高手帮忙解释下符号^代表的是什么意思!



作者: 黄山    时间: 2011-12-26 19:21
按位异或运算符“^”是双目运算符。其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。
作者: 刘冠杰    时间: 2011-12-26 21:20
这位仁兄讲的还是不太清楚哦,能否讲的具体点!?
作者: 黄山    时间: 2011-12-26 22:22
a 1111
b 0000

a^= b; a=a^b
a=1111

b ^= a;
b=1111

a ^= b;
a=0000

作者: 张旭    时间: 2011-12-27 00:10
将a和b转换为二进制位:  a=1010     b=0101  异或运算就是进行二进制运算    相同出0 相异出1
a ^= b  运算结果为  a=1111
b ^= a  运算结果为  b=1010
a ^= b    运算结果为 a=0101
记得口诀    相同出0  相异出1







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2