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

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

相关推荐
BirdenT2 小时前
20260519紫题训练
c++·算法
csdn_aspnet7 小时前
C语言 Lomuto分区算法(Lomuto Partition Algorithm)
c语言·开发语言·算法
谙弆悕博士7 小时前
【附C源码】从零实现C语言堆数据结构:原理、实现与应用
c语言·数据结构·算法··数据结构与算法
gaosushexiangji10 小时前
DIC系统推荐:基于千眼狼三维数字图像相关的无人机旋翼疲劳试验全场应变与位移测量
人工智能·算法
小王C语言12 小时前
【线程概念与控制】:线程封装
jvm·c++·算法
kyle~12 小时前
工程数学---点云配准卡布施(Kabsch)算法(求解最优旋转矩阵)
线性代数·算法·矩阵
三品吉他手会点灯12 小时前
C语言学习笔记 - 35.数据类型 - printf函数的非输出控制符与格式优化
c语言·开发语言·笔记·学习
张二娃同学13 小时前
03_变量常量与输入输出_printf与scanf详解
算法
江南十四行13 小时前
并发编程(一)
java·jvm·算法
Ghost Face...13 小时前
U-Boot SPL阶段与主阶段深度解析:从ROM到Kernel的完整引导之旅(ARMv8)
c语言