如何交换两个数字

//几种经典的交换两个数方法.

#include <stdio.h>

void function1(int *a, int *b) {   //可能产生溢出错误
    *a = *a + *b;
    *b = *a - *b;
    *a = *a - *b;
}

void function2(int *a, int *b) {  //位运算 ,不能和自身交换
    *a ^= *b;
    *b ^= *a;
    *a ^= *b;
}

void function3(int *a, int *b) { //最正常的写法
    int t;
    t = *a;
    *a = *b;
    *b = t;
}


int main()
{
    int a=8,b=9;
    printf("Before exchange,a is %d,b is %d \r\n",a,b);
    //使用两个寄存器的写法
    __asm {         
        MOV EAX,a
        MOV EBX,b
        MOV a,EBX
        MOV b,EAX
    }
    printf("After exchange,a is %d,b is %d \r\n",a,b);

    
    //使用一个寄存器的写法
    __asm {         
        MOV EDX,b
        XCHG EDX,a
        MOV b,EDX
    }
    printf("After exchange,a is %d,b is %d \r\n",a,b);

    //使用一个寄存器的写法
    __asm {
        MOV ECX,a
    }
    a=b;
    __asm{
        MOV b,ECX
    }
    printf("Before exchange,a is %d,b is %d \r\n",a,b);

    function1(&a, &b);
    printf("After exchange,a is %d,b is %d \r\n",a,b);

    function2(&a, &b);
    printf("Before exchange,a is %d,b is %d \r\n",a,b);

    function3(&a, &b);
    printf("After exchange,a is %d,b is %d \r\n",a,b);

    getchar();
    
    return 0;

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值