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;
}

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

相关推荐
春风解人意13 分钟前
从零开始学习嵌入式P29----线程间的通信
c语言·嵌入式硬件·学习
Hrain-AI28 分钟前
企业 AI 治理运营怎么做:分级授权、Token 用量可观测与模型统一纳管
大数据·人工智能·算法
剑指offer.1 小时前
Linux多任务-线程篇
java·jvm·算法
这是程序猿1 小时前
深入剖析Java HashMap:底层原理、数据结构与核心机制全解析
java·开发语言·数据结构
nike0good1 小时前
CF 126B(Password-z algorithm/exkmp)
开发语言·c++·算法
从零开始的嵌入式之旅1 小时前
day32
linux·c语言·经验分享·笔记·嵌入式硬件
无定义_1 小时前
Bellman-Ford——贝尔曼福特算法
数据库·算法
一条破秋裤2 小时前
C-数据类型
c语言·开发语言·chrome
xx~t2 小时前
嵌入式学习——进程与线程2
linux·c语言·学习·进程与线程
HanhahnaH2 小时前
各数据结构操作的时间复杂度汇总
数据结构·算法