一行代码实现数值交换
偶然在逛github的时候,看到下面的代码
x = x ^ y ^ (y = x);
这个代码执行以后,x和y的值就会兑换,对异或了解的朋友不难验证这个公式的正确性 现实工作中,我们可以使用这个吗?答案是,极其不推荐
- 首先是直观上的可读性不好,没注释,第一反应不知道在干嘛
- 其次是如果是对引用使用这种交换方式,引用的值是相同的值,那么结果是0,也就是说,对于
&x=1, &y=1
这样的单测,是无法通过的 - 最后,一般我们的印象都是位运算的效率会比较高,但实际如果使用传统的朴素交换
t = x;
x = y;
y = t
因为编译器优化的关系,速度并不会比这样写来的慢 所以综上所述,改代码只是一种炫技,不能适用所有的情况,请酌情考虑使用偶然在github上逛街看到的代码,这个方法的使用有一个前提,就是需要严格检查是否是引用同一个地址,如果是同一个地址,那么结果将会是0