两个变量数值的交换

简介: 两个变量数值的交换

前言

提示:这里可以添加本文要记录的大概内容:

两个变量的数值交换在我们编程时大量使用,下面我来介绍几种两个变量数值的交换思路,以丰富思路~


提示:以下是本篇文章正文内容,下面案例可供参考

一、数值交换的一般常用方法?

两个变量的数值交换一般方法很简单,借助第三个变量即可完成交换,这里简单提一下,不再赘述:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
  int num1 = 0;
  int num2 = 0;
  int temp = 0;
  printf("请依次输入num1和num2的数值:>\n");
  scanf("%d %d", &num1, &num2);
  printf("下面是交换前的各数字数值:>\n");
  printf("num1 = %d;\n", num1);
  printf("num2 = %d;\n", num2);
  printf("temp = %d;\n", temp);
  temp = num1;
  num1 = num2;
  num2 = temp;
  printf("下面是交换后的各数字数值:>\n");
  printf("num1 = %d;\n", num1);
  printf("num2 = %d;\n", num2);
  printf("temp = %d;\n", temp);
  return 0;
}

运算结果:

二、不借助第三个变量交换两个变量的数值内容:

1.数学方法:

我们可以利用数学的代数运算规律加以实现不借助第三个变量的情况下实现两个变量的数值交换:

代码如下(示例):

int main()
{
  int num1 = 0;
  int num2 = 0;
  printf("请依次输入num1和num2的数值:>\n");
  scanf("%d %d", &num1, &num2);
  printf("下面是交换前的各数字数值:>\n");
  printf("num1 = %d;\n", num1);
  printf("num2 = %d;\n", num2);
  //数值交换的代数运算方法:
  num1 = num1 + num2;
  num2 = num1 - num2;
  num1 = num1 - num2;
  printf("下面是交换后的各数字数值:>\n");
  printf("num1 = %d;\n", num1);
  printf("num2 = %d;\n", num2);
  return 0;
}

运算结果以及重点:

2.借助二进制位操作符------->按位异或:“^”

先来普及一下按位异或操作符的运算性质,它本质上是对数字的二进制形式进行操作,我们平时使用的是十进制数字,存储到计算机里的是二级制,而位操作符之一的按位异或操作符是对一个数的二进制形式进行操作

我们这里为了方便只讲正整数的情况:

比如一个十进制数字---------->二进制形式:

0----------->0;

5----------->101;

6----------->110;

计算机为了存储方便,把不够32位2进制的数字前面默认补为0;

0----------->00000000000000000000000000000000;

5----------->00000000000000000000000000000101;

6----------->00000000000000000000000000000110;

按位异或的运算性质:两个二进制数字,有0或者1,如果同为1(或0)计算结果为0,不同为1

由于按位异或的这个运算规律,我们可以发现以下按位异或的运算规律:

根据上面异或操作符的运算规律,我们可以利用其两个结论得到如下代码来实现两个变量的数字不借助第三变量的情况下进行交换:

`int main()
{
  int num1 = 0;
  int num2 = 0;
  printf("请依次输入num1和num2的数值:>\n");
  scanf("%d %d", &num1, &num2);
  printf("下面是交换前的各数字数值:>\n");
  printf("num1 = %d;\n", num1);
  printf("num2 = %d;\n", num2);
  //数值交换的代数运算方法:
  num1 = num1 ^ num2;
  num2 = num1 ^ num2;
  num1 = num1 ^ num2;
  printf("下面是交换后的各数字数值:>\n");
  printf("num1 = %d;\n", num1);
  printf("num2 = %d;\n", num2);
  return 0;
}`

运行结果:

总结

在两个变量需要交换时候,我们通常可以使用借助第三个变量的方法来实现交换,在本文中也介绍了其他两种方法:代数运算法,异或操作法,可以用来不借助第三个变量也可以实现两个数字内容的交换。

这有利于拓展我们解决类似问题的思路和视野,利于我们的进步!

期待同学们的点赞收藏转发,如果存在疑问或者错误,请评论区留言,谢谢!!!

相关文章
|
5月前
不使用第三方变量的情况下交换两个数值
不使用第三方变量的情况下交换两个数值
33 1
|
3月前
交换两个变量的值
交换两个变量的值
|
12月前
交换两个数的值的方法(三种)
交换两个数的值的方法(三种)
56 1
不使用第三变量。如何对2个数进行交换
不使用第三变量。如何对2个数进行交换
75 0
|
5月前
对调 2个变量的值若干种方式
对调 2个变量的值若干种方式
33 0
运用函数交换两个整型变量
运用函数交换两个整型变量
|
算法
【经典算法问题 二】交换两个变量值,不使用第三个变量
【经典算法问题 二】交换两个变量值,不使用第三个变量
60 0
|
自然语言处理 C语言 C++
输入两个整数,求它们按由从大到小的顺序输出。要求使用变量的引用。
输入两个整数,求它们按由从大到小的顺序输出。要求使用变量的引用。
|
数据安全/隐私保护 C语言
【C语言】交换两个int变量的值,不能使用第三个变量
交换两个int变量的值,不能使用第三个变量。即a=3,b=5,交换之后 a=5,b=3