一行代码实现数值交换

偶然在逛github的时候,看到下面的代码

x = x ^ y ^ (y = x);

这个代码执行以后,x和y的值就会兑换,对异或了解的朋友不难验证这个公式的正确性 现实工作中,我们可以使用这个吗?答案是,极其不推荐

  • 首先是直观上的可读性不好,没注释,第一反应不知道在干嘛
  • 其次是如果是对引用使用这种交换方式,引用的值是相同的值,那么结果是0,也就是说,对于&x=1, &y=1 这样的单测,是无法通过的
  • 最后,一般我们的印象都是位运算的效率会比较高,但实际如果使用传统的朴素交换

t = x;
x = y;
y = t

因为编译器优化的关系,速度并不会比这样写来的慢 所以综上所述,改代码只是一种炫技,不能适用所有的情况,请酌情考虑使用偶然在github上逛街看到的代码,这个方法的使用有一个前提,就是需要严格检查是否是引用同一个地址,如果是同一个地址,那么结果将会是0

posted @ 2022-12-20 12:18  myCodeLikeShit  阅读(51)  评论(0编辑  收藏  举报