不创建临时变量交换两个数的值

不创建临时变量交换两个数的值

我们都应该知道,要交换两个数的值,只需要创建一个临时变量,就可以进行交换。这种方法是简单的,也可以较为轻松的理解明白。代码如下:
#define _CRT_SELECT_NO_WARINGS
#include<stdio.h>
#include<stdlib.h>
int main()
{
	int m = 7;
	int n = 5;
	int p;
	p = m;
	m = n;
	n = p;
	printf("%d\n",m);
	printf("%d\n",n);
	system("pause");
	return 0;
}

这样输出得到的结构就是5和7了,但是,你是否清楚还有不创建第三种变量进行数值的交换呢。

第一种:加减的方法

代码如下:
#define _CRT_SELECT_NO_WARINGS
#include<stdio.h>
#include<stdlib.h>
int main()
{
	int a, b;
	a = 5;
	b = 7;
	a = a + b;
	b = a - b;
	a = a - b;
	printf("%d %d", a, b);
	system("pause");
	return 0;
}
这里你是否看明白了呢?
在这部分代码中,你可以看到,把a+b的值赋给了a,这样a的值的大小现在为a+b;然后,再把a-b的值赋给b,这样b就是原来的a的值了,这里你是否看懂了呢?b=a-b这个表达式中的a,现在的值得大小是a+b,a是原来一开始的a的值,这样你就明白了吧;再然后,现在b的大小是原来的a,而a的大小依旧是原来的a加上原来的b,那么,这个时候a=a-b中a-b就表示原来的a加上b减去b所代表的a的大小,剩下的就是原来的b的大小,这样你是否明白了呢?
此外,在这里用乘除的方法和加减是差不多的,只不过这两种方法都是有局限性的。

局限性:

加减中,如果数字的太大,这样会造成溢出的状况,即a和b的取值是局限的。
乘除中,如果再除数位上的数字为0.这样,程序显然也是走不下去的。

第二种:异或的方法

代码如下:
#define _CRT_SELECT_NO_WARINGS
#include<stdio.h>
#include<stdlib.h>
int main()
{
	int a, b;
	a = 5;
	b = 7;
	a = a^b;
	b = a^b;
	a = a^b;
	printf("%d %d", a, b);
	system("pause");
	return 0;
}
在这里,异或的理解和上面加减的理解方式是差不多的。吧a^b的值赋给a,这样b=a^b中就相当于原来的a^b^b,这样a的值就赋给了b;
同样的道理,在下一步中a=a^b就相当于原来的a^b^a,这样b的值就赋给了a;这样也能达到数值的交换,并且没有过多的局限性。
但是,平时我们并不会经常选择下面两种,主要是因为程序编译时比较繁琐,并没有创建变量来的快捷和方便。


  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值