今天发现一个不用第三个变量就可以交换两个变量的值的方法
平常交换两个变量的值都是建一个新变量存放然后交换。 int a = 5; int b = 6; int temp; temp = a; a = b; b = temp;
可能是有点知识没牢固,今天看位运算的时候,发现可以通过位运算实现不需要第三个变量就交换的方法。 int a = 5; int b = 6; a = a ^ b; b = a ^ b; a = a ^ b; 这样就交换成功了。它是通过三次异或实现不用临时变量就交换两个变量的方法。 异或的操作: a: 1 1 0 0 b: 1 0 1 0 异或运算 0 1 1 0 当它是相同的时候,异或为0,不同的时候异或为1(同为0,异为1),还有发现0具有保持的特性,1具有反转的特性,任意一个(0,1)与0异或都是它本身,而任意一个(0,1)与1异或都是它相反的一个数 那如上: a ^ a 1 1 0 0 1 1 0 0 异或: 0 0 0 0 则: a ^ a ^ b 0 0 0 0 1 0 1 0 因为我们发现0有保持的特性,即任意一个(0,1)与0异或都是它本身 1 0 1 0 所以发现其实a ^ a ^ b = b 这样发现 a = a ^ b; b = a ^ b; 这个地方a = a ^ b,也等于b = a ^ b ^ b,这个时候b = a; 而接下来 a = a ^ b; 这个时候,b=a,就等于a = a ^ b ^ a;所以a = b;交换完成。 iosers