如何将a,b的值进行交换,并且不使用任何中间变量?
如使用:
a = a + b; b = a - b; a = a + b;
这样做有一个问题:当a,b相加的时候有可能产生越界,那么这种办法肯定不是最好的啦(两个数相加的时候,好的思维习惯就是考虑会不会越界,这个思想常被腾讯考),那么这种方法一定不是最佳方法了。
然而用异或语句比较容易,不用担心越界的问题。
a = a ^ b; b = a ^ b; a = a ^ b;
按位异或运算符“^”是双目运算符,其功能是参与运算的两数各对应的二进制位相异或,当对应的二进制位相异时,结果为1。参与运算数仍以补码形式出现。
如a = 5 , b = 9,进行转换。
例如9 ^ 5可写成算式如下:
0000 1001 ^ 0000 0101 = 0000 1100 (十进制数为12)
#include<stdio.h> int main() { int a = 5 , b = 9; a = a ^ b; b = a ^ b; a = a ^ b; printf("a = %d\n" , a); printf("b = %d\n" , b); return 0; }