黑马程序员技术交流社区
标题:
关于,n=n^m;m=n^m;n=n^m;进行n和m的数值交换问题,我彻底晕了。
[打印本页]
作者:
曹宇
时间:
2013-3-25 20:48
标题:
关于,n=n^m;m=n^m;n=n^m;进行n和m的数值交换问题,我彻底晕了。
本帖最后由 曹宇 于 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 我很矛盾。,头都炸了。。。,难道是还未清空的数据缓存吗?
还请高手解答。。。头都炸了!啊啊啊啊啊啊啊啊啊啊啊啊啊啊!!!!!
作者:
疯狂程序
时间:
2013-3-25 20:56
举个例子你就差不多了
首先 亦或性质 就是一个数^另一个数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
如果还不明白我们细聊呵呵!
作者:
Keith
时间:
2013-3-25 21:01
执行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。
完成!!!
作者:
杨长川
时间:
2013-3-25 21:11
本帖最后由 杨长川 于 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 实现了互换操作。
作者:
曹宇
时间:
2013-3-25 21:17
本帖最后由 曹宇 于 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:}
作者:
刘策
时间:
2013-3-25 21:33
当第一上式子完后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希望能帮到你。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2