交换两个数的值——优化方案

交换两个数有多种方法,以下介绍四种方法

方法一(创建临时变量):

#include
int main()
{
    int num1 = 0;
    int num2 = 0;
    int tmp = 0;
    printf("请输入两个 要交换的数字:\n");
    scanf("%d%d", &num1, &num2);
    tmp = num1;
    num1 = num2;
    num2 = tmp;
    printf("交换后为%d  %d\n", num1, num2)
    return 0;
    }

方法二(调用函数)

#include
void swap(int *a, int* b)    //用指针来存放地址
{
    int tmp = *a;    //*a解引用,即为num1
    *a = *b;
    *b = tmp;
}
int main()
{         
    int num1 = 0;
    int num2 = 0;
    printf("请输入两个 要交换的数字:\n");
    scanf("%d%d", &num1, &num2);
    swap(&num1, &num2);           //传递地址
    printf("交换后为%d  %d\n", num1, num2);
return 0;
}

方法三(不创建临时变量)

#include
int main()
{
    int num1 = 0;
    int num2 = 0;
    printf("请输入两个 要交换的数字:\n");
    scanf_s("%d%d", &num1, &num2);
    num1 = num1 + num2;
    num2 = num1 - num2;
    num1 = num1 - num2;
    printf("交换后为%d  %d\n", num1, num2);
    return 0;
    }

方法四(不创建临时变量,用异或)

#include
int main()
{
    int num1 = 0;
    int num2 = 0;
    printf("请输入两个 要交换的数字:\n");
    scanf_s("%d%d", &num1, &num2);
    num1 = num1^num2;
    num2 = num1^num2;               // 异或:二进制位数相同为0,不同为1
    num1 = num1^num2;               //1.一个数异或自身为零1^1=0
    printf("交换后为%d  %d\n", num1, num2);
      return 0;
      }                                  //2. 1^2^1=2

异或另外两条小规律:

  1. 一个数异或自身为零1^1=0
  2. 一个数异或某个数在异或自身结果为某个数,例如:1^2^1=2

你可能感兴趣的:(交换两个数的值——优化方案)