面试题:不使用中间变量,交换两个数字

时间:2021-05-04 19:31:12

面试题:不使用任何中间变量,交换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,则进行的操作如下: