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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© danielzyj 中级黑马   /  2014-3-26 14:39  /  4578 人查看  /  13 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 danielzyj 于 2014-3-27 16:31 编辑

a=a^b;
b=a^b;
a=a^b;   替换a b 的值的时候,不借助过度变量,这是个什么原理呀?

点评

建议认真再看遍毕老师的视频,如果还有疑问 请继续提问!!!  发表于 2014-3-26 15:11

13 个回复

倒序浏览
本帖最后由 Zero霖 于 2014-3-26 14:52 编辑

a=a^b;b=a^b;a=a^b;我换个方式,也就是
a=a^b;→c1=a^b;
b=a^b;→c2=c1^b=(a^b)^b=a;此时,b被赋予a的值。
a=a^b;→c3=c1^c2=(a^b)^a=b;此时,a被赋予b的值。不知道这样的解释可不可以?
回复 使用道具 举报
  1. n =  n^m;
  2. m =  n^m; ----(n^m)^m
  3. n =  n^m;----n^(n^m)
  4. 一个数异或同一个数两次,结果还是那个数。
  5. 利用的就是这个原理。
复制代码
回复 使用道具 举报
回复 使用道具 举报
^是位异或逻辑预算。
比如a = 1, b = 2;
a = a^b; → a =1^2; → a =0001^0010(这里把十进制的1和2换成二进制);→ a = 0011(0001和0010对应位相同时为假(即0),不同时为真(即1)) = (此时换算成十进制)3 ;
根据以上方法:
b = a^b; → b = 3^2; → b = 0011^0010 = 0001=1;
a = a^b; → a = 3^1; → a = 0011^0001 = 0010 =2;
现在就是a = 2,b = 1;了

回复 使用道具 举报
  1. a=a^b;
  2. b=a^b;
  3. a=a^b;
复制代码

异或操作,记住一句话,一个数异或另一个数两次,结果还是这个数本身

把a,b换成具体的数字容易理解一些
回复 使用道具 举报
MVP 中级黑马 2014-3-26 17:38:40
7#
这个知识点,你只要记住毕老师的一句话,就是“一个数被异或两次就等于原来的值”。a=a^b;
b=a^b=(a^b^b),a被异或两次,所以还是a,相当于:b=a,所以a的值就赋给b了。
a=a^b=(a^a^b,b被异或两次,所以还是b,相当于:a=b,所以b的值就赋给a了。
回复 使用道具 举报
一个数异或同一个数两次结果还是那个数。a=a^b;把这里代入下面的式子。
b=a^b;----->b=a^b^b----->b=a
所以得到a=a^b;   
回复 使用道具 举报
这只是两个变量的逻辑位操作。
回复 使用道具 举报
异或 a^a^b=a
回复 使用道具 举报
本帖最后由 李庆忠 于 2014-3-27 21:41 编辑

有个知识点你得知道,就是任何一个数异或另一个数两次,结果为这个数本身,比如11^5^5=11(这个你可以在DOS中编译一下试试),下面就好办了,第一步,a=a^b后,a的值就改变了,变成了a^b,第二步,b=a^b,这里面的a已经不是初始那个a了,而是a^b,所以,b=a^b=(a^b)^b=a,这样就把a的值赋给了b;第三步,a=a^b,由于在第二步b的值也已经改变,故这一步其实是a=a^b=(a^b)^a=b
回复 使用道具 举报
这是异或的特点。是按位运算的。异或:当两个数相同位数上不相等时(二进制就是不同时为0,或者1),该位异或的结果就是1
a=a^b;
b=a^b;// 等同于b=(a^b)^b  运算符相同,没有运算顺序吧。也就等同于 b=a^b^b;也就等同于b=a^(b^b);所以b=a
a=a^b; //分析方法同上。
希望能够帮助你理解。
回复 使用道具 举报
总结来讲就是一个数亦或同一个数两次结果还是那个数

这道题老毕视频里有讲解

要想了解清楚  随便取两个数  用2进制在草稿上画画就明白了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马