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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王德升 中级黑马   /  2012-4-24 16:42  /  1570 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 王德升 于 2012-5-10 17:39 编辑

class Demo
{
     public static void main(String[] args)
     {
     int n=3,m=8
     system.out.println("n="+n+",m="+m);
     }
}
然后老师说:第一种方法:①n=n^m ;                       第二种方法:①11=3+8即n=n+m
                                    ②m=n^m;// (n^m)^m;                       ②3=11-8即m=n-m
                                    ③n=n^m;// n(n^m);                           ③8=11-3即n=n-m
①→②我懂,但是②→③我不太明白。
我的思路:①→②n是变量,m是不变的,所以m=(n+m)-m=n。
               ②→③n是不变的,m是变量,所以n=n-(n-m)=m。
我的思路对吗?

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

5 个回复

倒序浏览
本帖最后由 龚正军 于 2012-4-24 19:53 编辑

首先你要理解2个问题:
一是:什么是变量:(啊,这也要理解?)变量定义书本有我不重复,我要说的是:变量就是:可以变更的量(估计你觉得是废话,但这很重要),既然是在变更的量,那么你首先要跟上他的变化,
你之所以没看懂,其实简单来说就是没跟上变量的变化!!知道这点我们再来分析:
我们先不说^,(留给你自己理解我讲的后自己体会),我们直接讲第二种方法。
我们一步步分析:
int n=3,m=8----------------------------n,m都被定义成了int型的变量,都是变量(如果这有问题,你应该补充下基础了,不好意思之前用词不当,多包涵,现在改掉)
①11=3+8即n=n+m------------------------n变了,变成11了,(他是变量,要随时变的,跟上它怎么变才行,这是第一次变)
②3=11-8即m=n-m------------------------m变了,变成3了。因为右边的n是上面最后次变化的11,右边m是8.那么左边m最后变化成了3(跟上变量的变化)
  ③8=11-3即n=n-m------------------------n变了,因为这里面的右边个n是上面最后次变化的11,m是上面最后次变化的3,最后左边的n最终变化成8
回复 使用道具 举报
①11=3+8 即n=n+m                  
②3=11-8即m=n-m
③8=11-3即n=n-m
int m;
int n;
开始换位
n=n+m;      记住这个时候n已经变化了,下面在使用n的时候就是n=(n+m)
m=n-m        这句话就是m=(n+m) -m  因为上面一句已经把n变为n+m
n=n-m         这句话你就可以直接把上面的n和m的值拿下来用(n+m)-((n+m)-m)
我当初理解就是这样的。。。
回复 使用道具 举报
龚正军 发表于 2012-4-24 16:58
首先你要理解2个问题:
一是:什么是变量:(啊,这也要理解?)变量定义书本有我不重复,我要说的是:变量 ...

懂了谢谢,那你给我说说^。
回复 使用道具 举报
补充一下吧
n^m = 什么都不是
但是如果 n^m^m =n
或者 n^m^n =m
这时候你发现了吧,如果同时出现两个相同的在一起^,就会体现剩下那个
如果你懂了^这个意义,直接这么出现一下就能看出来
回复 使用道具 举报
本帖最后由 龚正军 于 2012-4-24 19:54 编辑

刚下班,出去买菜,刚回来!!,好的,我继续跟你讲解第一种方法。其实你可以自己解释^更有映像些。

其实他跟第二种方法唯一区别就是,你要明白一个前提!!
前提是:任何对象或者数据,比如是x,在2次异或相同密码(对象或者数据)后都会还原的原则。如:我们设置个密码(对象或者数据)为:m,那么x^m^m=x   知道和理解了这根本性的问题后我们才能往下看!!

---------------------------------割掉----------------------------------------------

然后我们就可以很轻松的根据第2个方法来解释第一个方法了。道理是一样的,跟上变量的变化!!!

第一种方法:①n=n^m ;                    ---------------------------------n变了,变成n^m了,(我们不去管具体是什么,只知道他变成n^m了)   
                   ②m=n^m;// (n^m)^m;     ---------------------------------m变了,变成n了,(因为右边的n已经是上边最后次变化的n^m了,所以这点就相当于最开始的那个n^m^m,我们都知道2次异或相同密码会得到原结果,------看分割线上面所以得n)         
                   ③n=n^m;// n(n^m);   -------------------------------------n又变了,变成m了,(因为n上面最后次变化还是n^m,m上面最后次变成了n,那么就相当于n^m^n   =     m^n^n   =    m)


对于之前答复有用词不当的地方,我已经编辑过了,楼主同学多包涵!!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马