A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

在传智播客视频基础上曾看到的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;
这种方法就不解了,求高手帮忙解释下符号^代表的是什么意思!


评分

参与人数 1技术分 +2 收起 理由
李荣壮 + 2

查看全部评分

4 个回复

倒序浏览
黄山 黑马帝 2011-12-26 19:21:04
沙发
按位异或运算符“^”是双目运算符。其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。

评分

参与人数 1技术分 +2 收起 理由
李荣壮 + 2

查看全部评分

回复 使用道具 举报
这位仁兄讲的还是不太清楚哦,能否讲的具体点!?
回复 使用道具 举报
黄山 黑马帝 2011-12-26 22:22:26
板凳
a 1111
b 0000

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

b ^= a;
b=1111

a ^= b;
a=0000
回复 使用道具 举报
张旭 黑马帝 2011-12-27 00:10:45
报纸
将a和b转换为二进制位:  a=1010     b=0101  异或运算就是进行二进制运算    相同出0 相异出1
a ^= b  运算结果为  a=1111
b ^= a  运算结果为  b=1010
a ^= b    运算结果为 a=0101
记得口诀    相同出0  相异出1


评分

参与人数 1技术分 +2 收起 理由
李荣壮 + 2

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马