如何交换两个数字

来源:互联网 发布:sql numeric是什么类型 编辑:程序博客网 时间:2024/05/21 07:57
//几种经典的交换两个数方法.#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;}


原创粉丝点击