"Coding Interview Guide" -- 不用额外变量交换两个整数的值

题目

  如何不用任何额外变量交换两个整数的值

分析

  关于异或运算有三点性质:

  1、异或运算满足交换律和结合律;

  2、一个数与自己异或的结果为0,即a^a=0;

  3、一个数与0异或是它自己本身,即a^0=a;

1 a = a ^ b;
2 b = a ^ b;   //此时a == a ^ b; b = a ^ b = (a ^ b) ^ b = a ^ (b ^ b) = a;
3 a = a ^ b;   //此时b == a; a = a ^ b = (a ^ b) ^ a = (a ^ a) ^ b = b;

  Java中是值传递,所以没办法通过将两个整型值传递给交换函数实现交换它们的值

来源:左程云老师《程序员代码面试指南》

  

猜你喜欢

转载自www.cnblogs.com/latup/p/10872478.html