如题 , 如果你和我一样是初学者在看, 基础版视频老师教异或来交换变量的值时候一定很惊艳,因为,老师教的和另外两种方法:加减法和设置中间变量法相比,代码看起来要简单得多,而且看起来逼格更高。其方法如下:
int a = 3, b = 4;
a = a ^ b;
b = a ^ b;
b = a ^ b;
自此之后,我在敲代码时候如果需要用到交换变量的值,我都用这个方法。但我发现一个问题,就是视频里老师自己从来不用这个方法,他都用设置中间变量 temp。这让我很奇怪。我就去百度了下,找到了这样一个博客,原文地址如下http://blog.csdn.net/baozi1159/article/details/6923460里面说这样写并不好理由如下:
1. 这个所谓的“技巧”在现代的机器上只会更慢(我甚至怀疑它从来就不可能比原始办法快)。原始办法是两次内存读和写,这个"技巧"是六读三写加三次异或(或许编译器可以优化成两读三写加三次异或)。
2. 同样也不能节省内存,因为中间变量 tmp 通常会是寄存器(稍后有汇编代码供分析)。就算它在函数的局部堆栈(stack)上,反正栈已经开在那儿了,也没有进一步的函数调用,根本节约不了一丁点内存。
3. 相反,由于计算步骤较多,会使用更多的指令,编译后的机器码长度会增加。
还有就是 我自己也遇到过一次这样的问题 即用异或无法交换两个变量的值如果大家想讨论我可以把我的代码 也发出来欢迎大家指正。 |
|