在网上看到了这样一道面试题,“int A=5,int B=2,怎样交换A与B的值”,或许这是一道简单到不能再简单的题,但能作为一道面试题,肯定有其独特之处
大多数人会通过定义第三个变量来中转,即:
方法一:
int temp;
temp=A;
A=B;
B=temp;
其实除了这种方法,还可以不通过中间变量,仅经过简单运算就地交换
例如:利用加减法
方法二:
A=B-A=2-5=-3;
B=B-A=2-(-3)=5;
A=A+B=-3+5=2;
当然,还可以再简化一下,这种方法我是没有想到
方法三:
A=A+B-(B=A)=5+2-5=2 同时B也被替换成了5.
还可以通过异或运算(相同为0,不同为1)来完成
方法四:A=A^B; A=A^B; A=A^B; 或者A^=B^=A^=B;
具体过程如下:
A=A^B;
B=A^B=(A^B)^B=A^(B^B)=A^0=A;
A=A^B=(A^B)^A=(A^A)^B=0^B=B;