今天写一个有意思的操作。
我们来看一个码农们经常遇到的一个经典问题:
如何实现对两个整数变量的值进行互换?
这个问题其实非常简单,int一个temp作为中间变量就完事了嘛~
为了方便接下来少展示一些冗余的重复代码,我们先给出条件,下面的代码就只展示关键的那部分。
条件如下:
int a = 3;
int b = 4;
int temp = 0;
要求使变量a与b交换值,即使a = 4;b = 3.
先给出经典方法,也是最易理解,被使用频率最高的方法:
方法一:
temp = a;
a = b;
b = temp;
不需要什么注释就可以无压力看懂。
然而,对不起我的方法二三四五要开始秀了。
方法二:
a = a + b;
b = a - b;
a = a - b;
此方法有一点点绕,没有使用中间变量temp,总体来说看懂的难度也不高。
方法三:(括号中为在运行过程中的变量实时的值)
a = a ^ b;
b = a ^ b;
a = a ^ b;
此方法用了位运算符 ^,即异或,用到了一个数据被另一个数据异或两次,该数据还是原来的数据的原理。思路依然不算太难。
方法四:一行代码解决问题
a = a + b - (b = a);
喵?我告诉你你这么一顿秀你的组员会打你的。因为他会看半天,等他看懂了就感觉自己被秀了。莫慌还有方法五。
方法五: 一行代码解决问题的位运算版
a = a ^ b ^ (b = a);
这一行代码在极度简化了代码量的同时,也是机器运行最快的代码,因为主要运算全都是位运算,这是计算机处理数据最直接的运算方法。
无论是程序员还是计算机看起来,这都是最极速的解决问题的方法。
虽然这个问题是一个非常简单非常基础的问题,但是依然掩盖不了这一行巧妙的代码的优秀,毕竟极简代码正是极客的追求。
(话虽然这么说但是不建议工作中如此优秀,会被本来就累得半死还得研究你的代码的同事打死的~)