论如何用变量值交换这种基本操作秀瞎同行狗眼

今天写一个有意思的操作。

  我们来看一个码农们经常遇到的一个经典问题:

如何实现对两个整数变量的值进行互换?

  这个问题其实非常简单,int一个temp作为中间变量就完事了嘛~
  为了方便接下来少展示一些冗余的重复代码,我们先给出条件,下面的代码就只展示关键的那部分。
  条件如下:

   int a = 3;
   int b = 4;
   int temp = 0;

  要求使变量a与b交换值,即使a = 4;b = 3.
  先给出经典方法,也是最易理解,被使用频率最高的方法:

方法一:

temp = a; \color{gray}{//temp = 3,a = 3}
a = b; \color{gray}{// a = 4,b = 4}
b = temp; \color{gray}{// b = 3,temp = 3}

  不需要什么注释就可以无压力看懂。
  然而,对不起我的方法二三四五要开始秀了。

方法二:

a = a + b; \color{gray}{//a = 3 + 4 = 7 }
b = a - b; \color{gray}{//b = 7 -4 = 3 }
a = a - b; \color{gray}{//a = 7 - 3 = 4}

此方法有一点点绕,没有使用中间变量temp,总体来说看懂的难度也不高。

方法三:(括号中为在运行过程中的变量实时的值)

a = a ^ b; \color{gray}{//a = a(3) 异或 b(4) = 7 }
b = a ^ b; \color{gray}{// b = a(7)异或b(4) = a(3) 异或 b(4)异或 b(4) = 3}
a = a ^ b; \color{gray}{//a = a(7) 异或 b(3) = a(3) 异或 b(4) 异或b(3) = 4 }

  此方法用了位运算符 ^,即异或,用到了一个数据被另一个数据异或两次,该数据还是原来的数据的原理。思路依然不算太难。

方法四:一行代码解决问题

a = a + b - (b = a); \color{gray}{//a = 3 + 4 - 3 = 4; b=3 }

  喵?我告诉你你这么一顿秀你的组员会打你的。因为他会看半天,等他看懂了就感觉自己被秀了。莫慌还有方法五。

方法五: 一行代码解决问题的位运算版

a = a ^ b ^ (b = a); \color{gray}{//a =( a 异或 b 异或 a) = b = 4 , b = 3 }

  这一行代码在极度简化了代码量的同时,也是机器运行最快的代码,因为主要运算全都是位运算,这是计算机处理数据最直接的运算方法。
无论是程序员还是计算机看起来,这都是最极速的解决问题的方法。

  虽然这个问题是一个非常简单非常基础的问题,但是依然掩盖不了这一行巧妙的代码的优秀,毕竟极简代码正是极客的追求。

(话虽然这么说但是不建议工作中如此优秀,会被本来就累得半死还得研究你的代码的同事打死的~)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容