小谈两数比较和交换问题

比较

1、两个变量int aint b,找出两个数中间比较大的。
方法一:

int max;
if (a > b)
{
    max = a;
}
else
{
    max = b;
}

方法二:

int max = (a > b) ? a : b;

方法三:

int max = ((a+b)+abs(a-b))/2

交换

2、两个变量int aint b,交换这两个变量的值。
方法一:

int a = 10;
int b = 20;
int temp = a;
a = b;
b = temp;

这样做的缺点是消耗多内存,效率低。

方法二:

a = a + b;
b = a - b;
a = a - b;

这样做的缺点是如果a、b都是比较大的两个数,a = a+b时就会超界。

方法三:

a = a ^ b;
b = a ^ b;
a = a ^ b; 

这样做的优点是:消耗内存少,且无须担心超界的问题。

这样做的原理是按位异或运算。按位异或运算符^ 是双目运算符,其功能是参与运算的两数各对应的二进制位相异或,当对应的二进制位相异时,结果为1,当对应的二进制位相同时,结果为0,参与运算数仍以补码形式出现。

推荐阅读更多精彩内容