面试题:不使用任何中间变量,交换a,b两个数字的值
这个最好采用异或语句进行比较,无须担心数值越界的问题,如果通过a=a+b;b=a-b;a=a-b;的话,有可能a+b值就直接越界了。
private void swap(int a, int b) { System.out.println("before swap,a = " + a + ",b = " + b); a = a ^ b; b = a ^ b; a = a ^ b; System.out.println("after swap, a = " + a + ",b = " + b); }
我们知道异或是相同取0相反取1,如:
0101异或1101的结果是1000。如对两个数,经过三次进行异或运行后的结果是这两个数的值互换。如 a = 0101, b=1101,则进行的操作如下: