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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 曹宇 于 2013-3-25 21:18 编辑

eg:
int n=3,m=8;
在不使用第三个变量的前提下交换这俩变量的值,视频教程中有个方法是:
n=n^m;  1
m=n^m;  2
n=n^m;  3
注:1 2 3只是对表达式进行编号,无实际意义。
这样就完成交换了。可是我很不明白,。。。
在2式子中。带入1式 m=n^m  -->  m=(n^m)^m    既m=n;  那么这个括号中的n和 式子1 中的最左边的n 是否是同一个,
因为n为变量,当式1完成的时候 n就是9了  那么在代入式2的时候m=(n^m)^m这个n 明显是3 若不是3 那么不会起到交换的作用的。。

那么就这样式3也不用看了 一样,我就晕了。既然是变量。为什么式2中的n 还是最早的那个n。。。而不是 n=n^m;后的n   我很矛盾。,头都炸了。。。,难道是还未清空的数据缓存吗?

还请高手解答。。。头都炸了!啊啊啊啊啊啊啊啊啊啊啊啊啊啊!!!!!

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

5 个回复

倒序浏览
举个例子你就差不多了
首先 亦或性质 就是一个数^另一个数2次还等于原数
int a  = 3;
int  b  = 6;

a = a^b;//3^6,此时a为3^6
b = a^b;//把上边a代入 3^6^6 = 3;此时b为3
a = a^b//把上边a和b代入 3^6^3 = 6

由此可见 数字被调换了  a = 6; b = 3

如果还不明白我们细聊呵呵!


评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
执行1:1完后,n为n^m  
执行2:把新赋值的n带入,右边=(n^m)^m 所以此时右边等于n ,即把右边n赋值给左边m,执行完2后,m已经为n,n还是n^m。
执行3:带入2中的mn,右边为(n^m)^n 等于n。所以此时右边等于m,赋值给左边n。

完成!!!

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 杨长川 于 2013-3-25 21:14 编辑

上面的解答已经很详细了,其实在不使用第三个变量的前提下交换两变量的值,还有另一种方法,如变量a=10,b=20。

a=a+b;      //此时a=30  b=20
b=a-b;       //此时a=30  b=10
a=a-b;       //此时a=20  b=10

你仔细对比体会一下,结果一样的使得 a=20,b=10 实现了互换操作。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 曹宇 于 2013-3-25 21:41 编辑

int a  = 3;
int  b  = 6;

a = a^b;//3^6,此时a为3^6
b = a^b;//把上边a代入 3^6^6 = 3;此时b为3
a = a^b//把上边a和b代入 3^6^3 = 6


我突然明白了。。异或两次还是原来的数我知道,只是叫我搞混淆了。。

如同第一个式子之后 a=3^6  a的值为5
那么b = a^b;//把上边a代入 3^6^6 = 3;此时b为3   在这地方我搞错了,我原本想的 既然a已经改变  
我原本以为这个式子就应该是b = a^b;//把上边a代入 5^6 != 3;就不等于3,其实一计算 5^6其实 还是等于3   并且我没想到5其实就是3^6一消还是3。。。

可能我没有变成数字去计算。只是在 n了 m了 字母在哪扣  扣半天自己都晕了。。。换算成数字,其实很简单。。。其实就算是字母在那扣,我现在一想其实
也是,n或者m在内存中都有它自己的数值,不管是多少,总会满足上面的规律,就相当于 5^6其实还是 3^6^6  n和m在内存中的数无论是啥 结果都是一样的。。。

哎,最近几天狂看视频学习,脑袋一时塞的东西太多,反应慢了。。。。。

我看我可以休息一会了。。。。。。


也感谢  Keith     学长的解答啊。。。。

小弟明白了。。。。

其实就是自己在困扰自己。。。。额。。。。{:soso_e135:}
回复 使用道具 举报
当第一上式子完后n是等于11吧。如果代入第二个式子m就等3.这时n是11还是这么给你说吧,不用计算结果的,将第一个式子代入第 二个式子为:m=(n^m)^m去掉括号后为:m=m^n^m;.老师讲一个数异域一个数两次,结果 还是这个数,所以第二个式子化简后是:m=n;然后在运行第三个式子:n=(n^m)^m其实这时在等号的右边的那个括号外面的m的值就是n的值的了,所以此式子是这样的:n=(n^m)^n,就等于n=(3^8)^3希望能帮到你。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1 新人加油

查看全部评分

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