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

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

相关推荐
Тиё Сиротака2 小时前
红包分配算法的严格数学理论与完整实现
算法
hefaxiang3 小时前
C语言常见概念(下)
c语言·开发语言
potato_may3 小时前
链式二叉树 —— 用指针构建的树形世界
c语言·数据结构·算法·链表·二叉树
Mz12213 小时前
day07 和为 K 的子数组
数据结构
java修仙传4 小时前
每日一题,力扣560. 和为 K 的子数组
算法·leetcode
ada7_4 小时前
LeetCode(python)——148.排序链表
python·算法·leetcode·链表
点云SLAM4 小时前
点云配准算法之-Voxelized GICP(VGICP)算法
算法·机器人·gpu·slam·点云配准·vgicp算法·gicp算法
Bona Sun4 小时前
单片机手搓掌上游戏机(二十)—pico运行doom之编译环境
c语言·c++·单片机·游戏机
Albert Edison5 小时前
【项目设计】C++ 高并发内存池
数据结构·c++·单例模式·哈希算法·高并发
我真不会起名字啊5 小时前
C、C++中的sprintf和stringstream的使用
java·c语言·c++