前言
提示:这里可以添加本文要记录的大概内容:
两个变量的数值交换在我们编程时大量使用,下面我来介绍几种两个变量数值的交换思路,以丰富思路~
提示:以下是本篇文章正文内容,下面案例可供参考
一、数值交换的一般常用方法?
两个变量的数值交换一般方法很简单,借助第三个变量即可完成交换,这里简单提一下,不再赘述:
#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; }`
运行结果:
总结
在两个变量需要交换时候,我们通常可以使用借助第三个变量的方法来实现交换,在本文中也介绍了其他两种方法:代数运算法,异或操作法,可以用来不借助第三个变量也可以实现两个数字内容的交换。
这有利于拓展我们解决类似问题的思路和视野,利于我们的进步!