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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

a=a^b;
b=a^b;
a=a^b;
因为同一个数被亦或两次得到的还是原来的那个数!
回复 使用道具 举报
方式4//
同样给两个变量
int a=10;
int b=20;

a=(a+b)-(b=a);  //只需要一步 即可转换a,b 的值
分析:
(b=a),指把 a赋值给b,首先一步转换  
(a+b),值两数的和,
(a+b)-(b=a),指两数之和 减去 a (这里的a 是因为上面 b被a 赋值了) ,  结果就是b

转换成功~~~   
回复 使用道具 举报
路过。。。
回复 使用道具 举报
看看异或就可以
回复 使用道具 举报
^表示异或(XOR)。当且仅当a=b时,有a^b=0 。异或满足交换律和结合律:
交换律:a ^ b = b ^ a
结合律:(a ^ b) ^ c = a ^ (b ^ c)

另外,在异或运算中,0类似加法中的0:加法中 a + 0 = a,异或中,a ^ 0 = a

好了,有上述知识准备就可以来看你的题目了:

a = a^b; // 这句没什么可说的

b = b^a;
由于前一句改变了a,因此这里变为:
b = b ^ (a ^ b)
   = b ^ (b ^ a) (交换律)
   = (b ^ b) ^ a (结合律)
   = a                 (b ^ b = 0, a ^ 0 = 0)

a = a^b;
由于前两句的执行效果,这句变成:
a = (a ^ b) ^ a
   = (b ^ a) ^ a (交换律)
   = b ^ (a ^ a) (结合律)
   = b                (a ^ a = 0, b ^ 0 = b)

至此,完成a和b的交换


回复 使用道具 举报
一个语句实现  a=a+b-(b=a);
回复 使用道具 举报
使用  与 逻辑运算运算
回复 使用道具 举报
一个数,被另一个数异或两次,还是他的本身
a=a^b;  
b=a^b; 此时a^b   原来的表达式就可以表示为 b=(a^b)^b=a
a=a^b;同理  a=a^a^b=b
回复 使用道具 举报
张老师的视频里有详细叙述
回复 使用道具 举报
dingpanbo 来自手机 中级黑马 2014-8-10 22:01:01
30#
还有一个用两数和的方法
回复 使用道具 举报
dingpanbo 来自手机 中级黑马 2014-8-10 22:05:05
31#
m=m+n;   n=m-n;    m=m-n;
回复 使用道具 举报
其实异或那个方法比较不错,至少它不会出错,通过加减那种方法可能会出现错误,得到的结果不一定是你想要的。
回复 使用道具 举报
梧桐树下 来自手机 中级黑马 2014-8-10 23:10:34
33#
视频讲的很清楚
回复 使用道具 举报
楼上答得都不错
回复 使用道具 举报
jw在路途 发表于 2014-8-10 19:17
方式3//
给一个
int a=10;

不错!!!!!!!!
回复 使用道具 举报
异或就可以解决了
回复 使用道具 举报
拿个真实的数来算一算不就哦了么
回复 使用道具 举报
M单色调 来自手机 中级黑马 2014-8-11 00:13:30
38#
这个挺有意思的,学习了!
回复 使用道具 举报
12
您需要登录后才可以回帖 登录 | 加入黑马