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

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

posted @ 2013-06-18 23:53  天涯雪  阅读(639)  评论(0编辑  收藏  举报