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

不创建临时变量,实现两个数的交换

1.正常创建临时变量

cs 复制代码
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
//正常创建临时变量,交换两个数
int main()
{
	int a = 3;
	int b = 5;
	printf("交换前:a=%d,b=%d\n", a,b);
	int c = a;
	a = b;
	b = c;
	printf("交换后:a=%d,b=%d\n", a, b);
	return 0;
}

2.不创建临时变量,将a+b重新赋给a;(但是这种交换可能会导致溢出)

cs 复制代码
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
	int a = 3;
	int b = 5;
	printf("交换前:a=%d,b=%d\n", a, b);
	a = a+b;
	b = a-b;
	a = a-b;
	printf("交换后:a=%d,b=%d\n", a, b);
	return 0;
}

3.利用位操作符

我们可以推得a^a=0;0^a=a;

所以a^a^b=b;a^b^b=a;于是我们就可以利用这种方法完成两个数的交换

cs 复制代码
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
	int a = 3;
	int b = 5;
	printf("交换前:a=%d,b=%d\n", a, b);
	a = a ^ b;
	b = a ^ b;
	a = a ^ b;
	printf("交换后:a=%d,b=%d\n", a, b);
	return 0;
}

但是这种方法速度慢,而且只适用于整数,并且可读性不好,所以一般我们交换两个变量还是要用创建中间变量的方式

相关推荐
光影少年4 分钟前
为什么 JavaScript 中 0.1 + 0.2 !== 0.3,如何让其相等?
前端·javascript·算法
Escalating_xu9 分钟前
【C 语言】深入理解指针(5):sizeof、strlen、数组名语义与指针笔试题全解析
java·c语言·开发语言
HEJOO916 分钟前
Linux 设备驱动系列——使用全局工作队列
java·linux·算法
Code_Solitude29 分钟前
c语言:递归
java·c语言·算法
程序员清风1 小时前
哈希表:从键值映射到高效查找
数据结构·哈希算法·散列表
万年咸鱼1 小时前
解决C语言的内存释放机制
java·c语言·python
edtoplort1 小时前
OpenAI紧急叫停GPT-6.1 Astra训练,奥尔特曼为何踩刹车
人工智能·gpt·算法
蒜香可达鸭1 小时前
让视频生成流水线跑不崩:一个事件溯源的多 Agent 可靠执行框架
算法
小羊没烦恼!2 小时前
系统内部模块(子系统)之间的耦合以及模块(子系统)划分
java·开发语言·前端·数据库·算法·c#
Nebula_g2 小时前
JavaSE拓展:Arrays和Collections工具类
java·开发语言·算法·排序算法·工具类·javase·技术栈