从交换两个变量的值来看程序员的“奇技淫巧”
来看一道简单的题目:交换两个整型变量a、b的值。
在我们日常写程序时,应该经常会遇到上面的问题,很简单。借用一个第三方变量,很容易实现。代码如下:
temp = a; a = b; b = temp;
然而,在某些情况下,比如说面试,面试官可能对这个答案不太满意,那么,能不能不用第三方变量实现交换a、b 的值呢?
当然可以。不用第三方变量也有多种方法,比如说下面这种:
1 a = a + b; 2 b = a - b; 3 a = a - b;
回答上面的方法,面试官可能还是不太满意,因为两个整型变量相加会有越界的风险。既然相加会有越界的风险,那么改成相减吧。
代码如下:
1 a = a - b; 2 b = a + b; 3 a = b - a;
上面的方法,可能还不是面试官想要的,面试官想要的答案可能是位运算。虽然位运算在实际工作中用到的很少,但是用位运算显得逼格高,面试官更乐意听到位运算的答案。
代码如下:
1 a = a ^ b; 2 b = a ^ b; 3 a = a ^ b;
终于得到了面试官想要的答案,那么,还有更简单的方法嘛?或者说,还有更“巧”的办法嘛?
看下面的代码:
1 int main(){ 2 int a = 0,b = 0; 3 cin >> a >> b; 4 cout << b << " " << a << endl; 5 return 0; 6 }
运行结果:
实现了交换两个变量的值。
当然,最后一种方法是开玩笑了~