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

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

相关推荐
M-x_y12 分钟前
排序算法--C语言
c语言·算法·排序算法·设计语言
五味香16 分钟前
Java学习,字符串搜索
java·c语言·开发语言·python·学习·golang·kotlin
阿里技术19 分钟前
HNSW 分布式构建实践
分布式·算法·方案·hnsw·向量检索
南宫生41 分钟前
力扣-图论-9【算法学习day.59】
java·学习·算法·leetcode·图论
CopyProfessor1 小时前
Java版-图论-最短路-Floyd算法
java·算法·图论
aaal12341 小时前
代码随想录算法训练营day39|动态规划part7
算法·动态规划
Jack电子实验室1 小时前
STM32 出租车计价器系统设计(一) 江科大源码改写
c语言·stm32·单片机·嵌入式硬件·嵌入式
Coding~1 小时前
逆向攻防世界CTF系列56-easy_Maze
c语言·汇编·算法·安全·网络安全
PluviophileDD1 小时前
【笔记】C语言转C++
c语言·c++
绿白尼2 小时前
Linux C所有预定义的宏
linux·c语言