异或交换两个数字不可取
更新日期:
- 惯常的交换两个数的方法:
int tmp;
tmp = a;
a = b;
b = tmp; - 但是,不知从什么时候开始,有人发明了不使用临时变量交换两个数字的方法,
具体如下:
b = a^b;
a = a^b;
b = a^b;
有人认为这样可以少用一个变量,节省一个字节的空间,会让程序运行的更快,其实不然
- 这个所谓的技巧,会使电脑运行更慢,原始的办法是两次内存的读写,而这个技巧是
六读三写加三次异或。 - 同样也不能节省内存,因为中间变量tmp通常会是寄存器。就算它在函数的局部堆栈上,
反正stack已经开在那里了,也没有进一步的函数调用,根本节约不了内存。 - 相反,由于计算步骤较多,会使用很多的指令。
- 另外有隐患,如果a,b指向同一个数,那么执行之后,会变为0。
总结:这个技巧只能用来应付面试,实际中不会用的!!
注:本文是个人笔记,参考了陈硕的《Linux多线程编程》第12章的内容。