C语言——交换两个数(不能创建临时变量)

想要交换两个数,最简单的方式就是创建一个临时变量实现数的交换。

可咱就是不走寻常路,下面介绍不创建临时变量实现数的交换:

定义两个整形变量:

int a = 4;

int b = 5;

法一:

#include<stdio.h>

int main()
{
	int a = 4;
	int b = 5;

	printf("交换前:a=%d,b=%d\n",a,b);
	a = a + b;
	b = a - b;  //a + b - b = a
	a = a - b;  //a + b - a = b
	printf("交换后:a=%d,b=%d\n", a, b);

	return 0;
}

 

此方法有缺陷:会有栈溢出的风险。 

法二: 

此方法要用到位运算符(这里只介绍"^"(按位异或)):

"^"(按位异或) : 对应补码的二进制位数,相同为0,不同为1那么a ^ a = 0 , 0 ^ a = a。

int main()
{
	int a = 4;
	int b = 5;

	printf("交换前:a=%d,b=%d\n", a, b);
	a = a ^ b;
	b = a ^ b;  // a ^ b ^ b = a
	a = a ^ b;  // a ^ b ^ a = b
	printf("交换后:a=%d,b=%d\n", a, b);

	return 0;
}

 

      如果变量为浮点类型,只能老老实实用创建临时变量实现!

猜你喜欢

转载自blog.csdn.net/weixin_59174190/article/details/121440193
今日推荐