两数交换

Posted on 2012-10-14 23:06 常康康 阅读(144) 评论(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

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理