您的位置:首页 > 其它

交换两个数的方法总结

2012-06-22 14:52 197 查看
方法一:使用宏

#define Exchage(a, b) \
do{           \
a += b;\
b = a - b; \
a = a - b  \
}while(0)


方法二:使用第三个变量

void inplace_swap(int *a, int *b)
{
int tmp;
tmp =*a;
*a = *b;
*b = tmp;
}


方法三:利用布尔环的属性,加法逆元。

void inplace_swap(int *x, int *y)
{
*y ^= *x;
*x ^= *y;
*y ^= *x;
}


方法四:利用整数运算的属性。

void inplace_swap(int *a, int *b)
{
*a = *a + *b;
*b = *a - *b;
*a = *a - *b;
}


第四种方法关于存在溢出的问题,补码加上形成一个阿尔贝群,以及表达式(x+y)-x求值得到y,无论加法是否溢出,而 (x+y)-y总是会求值得到x。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: