likes
comments
collection
share

教你轻松理解:C语言中的三种数字交换方法,最后一种很少见

作者站长头像
站长
· 阅读数 27

(一)前言

你知道有多少种实现两个数字交换的方法吗?本文将介绍三种方法,一个比一个精彩。

(二)解法一

分析:现在我们有两个杯子,分别装满了可乐和牛奶,如图:

教你轻松理解:C语言中的三种数字交换方法,最后一种很少见

我们如何将两个杯子中的大小互换呢?很简单,再找一个空杯子不就行了吗!如图:

教你轻松理解:C语言中的三种数字交换方法,最后一种很少见

我们分三个步骤进行:

  1. 将可乐杯中可乐倒入空杯子
  2. 将牛奶杯中的牛奶倒入可乐杯
  3. 再将”空杯子“的可乐倒入牛奶杯

如图:

教你轻松理解:C语言中的三种数字交换方法,最后一种很少见

了解了解法一的思想之后呢,代码实现是轻而易举了。

int main()
{
	int a = 10;
	int b = 20;
	int temp = 0;
	temp = a;
	a = b;
	b = temp;
	printf("a=%d\n", a);
	printf("b=%d\n", b);
	return 0;
}

运行结果如下:

教你轻松理解:C语言中的三种数字交换方法,最后一种很少见

反思:如果找不到所谓的”空杯子“,我们能不能不借助其他变量,而完成交换呢? 实际上,这也是某公司的一道面试题,让我们来探究一下把!

(三)解法二

分析:我们这次用一个红球,一个绿球来分别代表两个杯子里的东西,如图:

教你轻松理解:C语言中的三种数字交换方法,最后一种很少见

上面这幅图,完整的演示了如何交换的过程,或许刚接触的小伙伴们还没有反应过来,但请再仔细琢磨 一会,如果还是有些想不通的地方,可以留言评论哦,作者会耐心解答~ 既然搞清楚了原理,那么代码的实现就简单了,请看:

int main()
{
	int a = 10;
	int b = 20;
	a = a + b;
	b = a - b;
	a = a - b;
	printf("a=%d\n", a);
	printf("b=%d\n", b);
	return 0;
}

我们注意到,解法二是有bug的,由于整型int空间有限,如果a和b的值很大,a+b的值很可能超出了整型int的范围,这样会出现错误的结果,如下图:

教你轻松理解:C语言中的三种数字交换方法,最后一种很少见

那么有没有更完美的方法呢? 当然! 前方高能!!!

(四)解法三

解法三比较抽象,我们直接先放代码:

int main()
{
	int a = 10;
	int b = 20;
	a = a ^ b;
	b = a ^ b;
	a = a ^ b;
	printf("a=%d\n", a);
	printf("b=%d\n", b);
	return 0;
}

解析:我们先来了解一下3个位操作符:&,|,^. 它们操作的对象是二进制位,&表示二进制位中有一个为0,结果为0

教你轻松理解:C语言中的三种数字交换方法,最后一种很少见

|表示二进制位中有一个为1,结果为1

教你轻松理解:C语言中的三种数字交换方法,最后一种很少见

^表示二进制位中相异结果为1,相同结果为0

教你轻松理解:C语言中的三种数字交换方法,最后一种很少见

我们重点来关注一下^:

教你轻松理解:C语言中的三种数字交换方法,最后一种很少见

教你轻松理解:C语言中的三种数字交换方法,最后一种很少见

好了,今天的分享到此结束,感谢小伙伴们的阅读,欢迎大家积极评论哦~

转载自:https://juejin.cn/post/7369951085195903039
评论
请登录