交换a,b最简单的方法是定义临时变量temp,然后进行交换。
无需中间变量如何交换a b呢? 百度后,方法总结如下:
方法一:加减法
float c = 1.2345f;
float d = 6.7891f;
c += d;
d = c - d;
c -= d;
缺点:由于加法,所以有溢出的可能。
方法二:乘除法
float c = 1.2345f;
float d = 6.7891f;
c *= d;
d = c / d;
c /= d;
缺点:由于乘法,则极有可能上溢出;d=0也无法处理;浮点数乘除有误差存在。
方法三:异或法
int a = 1;
int b = 3;
a ^= b;
b ^= a;
a ^= b;
缺点:由于异或运算不支持浮点型,所以float,double无法操作
方法四:汇编法
float c = 1.2345f;
float d = 6.7891f;
__asm
{
mov eax,c
xchg eax,d
mov c,eax
}
评价:汇编当然最为高效了,但可读性差。