如何交换两个数字
来源:互联网 发布: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;}