Posted on 2012-10-14 23:06
常康康 阅读(148)
评论(0) 编辑 收藏 引用
方法一 :
通过第三变量实现两数字交换。
int nX = 5;
int nY = 8;
int nT = 0;
nT = nX;
nX = nY;
nY = nT;
方法二 : 通过加减法实现两数字的交换。(仅限于对整形交换,浮点型可能存在精度丢失) int nX = 5;
int nY = 8;
nX = nX + nY;
nY = nX - nY;
nX = nX - nY;
方法三 : 通过乘除法时间两数字交换。(仅限于对整形交换,浮点型可能存在精度丢失,且除数nX不能为0) int nX = 5;
int nY = 8;
nX = nX * nY;
nY = nX / nY;
nX = nX / nY;
方法四 : 通过位运算符异或完成两数字交换。(位运算法仅限于整形,无法对浮点型交换) int nX = 5;
int nY = 8;
nX = nX ^ nY;
nY = nY ^ nX;
nX = nX ^ nY;
// nX ^= nY;
// nY ^= nX;
// nX ^= nY;
在代码中嵌入汇编代码的方法。(不使用加减法和异或法完成不使用中间变量交换两个数值型变量的)
① 使用xchg指令,这也是比较直观、容易想到的方法,因为xchg指令的功能就是交换源操作数和目的操作数的值,这里要使用额外寄存器来暂存变量。内嵌汇编代码如下:
_asm
{
mov eax,a
xchg b,eax
mov a,eax
}
② 使用额外的栈。这里使用反向的出栈顺序来完成交换。内嵌代码有如下两种形式:
_asm
{
push a
push b
pop a
pop b
}
另一种形式:
_asm push a
a = b;
_asm pop a
③ 使用mov指令。这种方法使用额外寄存器来暂存一个变量的值。
_asm mov eax,a
a = b;
_asm mov b,eax