【C语言入门】交换两个变量的值(三种方法)

✨✨欢迎大家来到Celia的博客✨✨

🎉🎉创作不易,请点赞关注,多多支持哦🎉🎉

所属专栏:C语言

个人主页:Celia's blog~

引言

  我们在编写程序时,经常会需要交换两个变量的值,本篇文章将会介绍三种交换变量的方法。

1.创建额外变量

#include<stdio.h>
int main()
{
	int a = 3;
	int b = 5;
	int c;
	printf("交换前的值分别为a = %d,b = %d\n", a, b);
	c = a;//c = a = 3
	a = b;//a = b = 5
	b = c;//b = c = 3
	printf("交换后的值分别为a = %d,b = %d\n", a, b);
}

顾名思义,这种方法需要创建一个额外的变量来暂时存储其中一个变量的值,具体过程为:

  • 将a的值赋值给c
  • 将b的值赋值给a
  • 将c中的值(a的值)赋值给b

2.运用加减法

#include<stdio.h>
int main()
{
	int a = 3;
	int b = 5;
	printf("交换前的值分别为a = %d,b = %d\n", a, b);
	a = a + b;//a = 8
	b = a - b;//b = 8 - 5 = 3
	a = a - b;//a = 8 - 3 = 5
	printf("交换后的值分别为a = %d,b = %d\n", a, b);
}

这种方法不需要创建额外的变量,但当a+b的值超过变量的最大存储范围时,这种方法就不再适用了。

3.按位异或

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

按位异或(^):用二进制形式对比两个变量的每一位,如果不同则为1,如果相同则为0。

例如:2 :0010

           3 :0011

       2^3 :0001

我们很容易就可以推测出:b^b = 0b^0 = b

我们再来看一下上面的例子:

  • a = a ^ b
  • b = a ^ b    可以看成 b = a^b = a^b^b = a^0 = a (将第一步带入第二步)
  • a = a ^ b    可以看成 a = a^b = a^a^b = 0^b = b (将第二步带入第三步)

总结

  这三种方法都可以交换两个变量的值,但运用加减法有可能导致变量值的溢出,另外两种就运行效率而言,创建额外变量的方法效率是最高的,可读性也是最高的,大家可自行斟酌~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/345017.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Shell脚本③条件语句、if命令和case命令

目录 一.条件语句 1.test测试条件表达式 2.整数数值比较 &#xff08;1&#xff09;比较两个整数大小 &#xff08;2&#xff09;查看系统剩余内存是否低于1024M 3.逻辑测试 4.三元运算符 二.if命令 1.单分支结构 2.双分支结构 3.多分支结构 三.case语句 四.脚本 …

cmd_to_robot 讨论及 G29 控制优化

cmd_to_robot 讨论及 G29 控制优化 cmd_to_robot 讨论 转向电机控制代码中&#xff0c;补偿信息在循环中发布&#xff0c;转向完成信息在回调函数中发布 转动电机控制代码中&#xff0c;对转动电机的控制在转向完成的回调函数中实现 这就意味着如果一直没有 /cmd_vel 消息发…

基于springboot+vue的学科竞赛管理系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 研究背景…

零日漏洞:威胁与应对

一、引言 随着信息技术的迅猛发展&#xff0c;网络安全问题日益凸显。其中&#xff0c;零日漏洞已成为当今网络安全领域最受关注的问题之一。本文将深入探讨零日漏洞的威胁、产生原因以及应对策略&#xff0c;以期提高人们对这一问题的认识和防范意识。 二、零日漏洞的威胁 …

Java - 数字签名与数字证书

文章目录 概述对称加密非对称加密数字签名数字证书根证书申请ca证书 完整流程小结 概述 SSL是一种安全协议&#xff0c;用于在网络传输中提供数据加密、身份验证和完整性保护。它基于传输层协议&#xff08;如TCP&#xff09;&#xff0c;并为其提供加密和安全功能。 对称加密…

LLM之RAG理论(七)| 高提升RAG检索的四种方法

​ RAG两大核心组件&#xff1a;检索和生成。本文将总结四种提高RAG系统检索质量的技术&#xff1a;1&#xff09;子问题查询引擎&#xff08;来自LlamaIndex&#xff09;&#xff0c;2&#xff09;RAG-Fusion、3&#xff09;RAG-end2end和4&#xff09;LoRA微调。 一、L…

如何用GPT绘图?

详情点击练级&#xff1a;如何用GPT绘图&#xff1f; 一OpenAI 1.最新大模型GPT-4 Turbo 2.最新发布的高级数据分析&#xff0c;AI画图&#xff0c;图像识别&#xff0c;文档API 3.GPT Store 4.从0到1创建自己的GPT应用 5. 模型Gemini以及大模型Claude2 二定制自己的GPTs…

多线程select并发

多线程select并发 只需要在上面代码的基础上对服务器端做些更改, 主要逻辑如下: 主线程在检测到有新的客户端连接之后, 创建一个子线程完成accept操作, 具体如下: if(FD_ISSET(lfd, &rdtemp)){auto* info new fdInfo;info->fd lfd;info->maxfd &maxfd;info…

grid布局,flex布局实现类似响应式布局的效果

一. grid布局 实现代码 <!DOCTYPE html> <html lang"en"><head><style>.box {display: grid;grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); /*自动填充&#xff0c;最小宽度300px*/justify-content: space-between;gap:…

go语言(十六)----tag

package mainimport ("fmt""reflect" )type resume struct {Name string info:"name" doc:"我的名字"Sex string info:"sex" }func findTag(str interface{}) {t : reflect.TypeOf(str).Elem()for i : 0;i < t.NumField…

redis高可用之Sentinel模式

文章目录 前言1. 创建联想主服务器的网络连接2. 创建连向其他Sentinel的命令连接 &#xff08;也就是调度中心的高可用&#xff09;3.选举领头Sentinel 调度中心高可用4.故障转移 选出新的主服务器 redis服务器高可用如何挑选新的主服务器&#xff1f; 总结 前言 Sentinel(哨岗…

【Keil5】keil5修改主题背景颜色--仿VS Code 主题

keil单调的白底主题难免会让人产生视觉疲劳&#xff0c;该工具里有仿VS的黑色主题.当然&#xff0c;如果你觉得这些都不合你心意也可自己制作配色方案。 1、备份 C:\Keil_v5\UV4下的 global.prop文件。 2、下或者复制 我配置的global.prop文件到你的Keil安装路径&#xff0c;比…

什么是护网行动?

护网&#xff0c;也称“网络保护”&#xff0c;是指网络安全人员对企业或组织的网络进行检查、维护和保护&#xff0c;以防止网络受到黑客攻击、病毒、木马或其它恶意程序的侵入和损害。护网工作包括&#xff1a;网络安全规划、网络配置和控制、漏洞发现和修复、入侵检测和防范…

jenkins 使用webhooks 触发构建任务gitea为例 gitlab类似

jenkins 使用webhooks 触发构建任务gitea为例 多次尝试以及网上的各种资料查阅成功了下 其他人给的答案他们有他们的道理&#xff0c;至少我没有实验成功。我这里就记录下 添加API token 将生成的token 复制保存 第4步骤的时候要用 配置构建方式 填写身份验证令牌 安全配…

Spring复习-问题回答

1.什么是 spring&#xff0c;你对 spring 的理解? Spring是一个轻量级&#xff0c;非侵入式的&#xff08;不使用框架特定的类&#xff0c;感受不到框架&#xff09;IOC和AOP一站式的java后端开发框架&#xff0c;简化企业开发。 2.spring 的优缺点 优点&#xff1a; Spr…

HTML标签(二)

目录 表格标签 表格的主要作用 表格的具体用法 表头单元格标签 表格属性 表格结构标签 合并单元格 合并单元格的方式&#xff1a; 跨行合并&#xff1a; 跨列合并&#xff1a; 列表标签 无序列表 有序列表 自定义列表 表单标签 表单域 表单域的常用属性 表单元素…

阿里云幻兽帕鲁服务器租用价格表,免费?

幻兽帕鲁异常火爆自建幻兽帕鲁服务器不卡又稳定&#xff0c;继腾讯云推出幻兽帕鲁自建服务器教程和4核16G幻兽帕鲁专用特价游戏服务器后&#xff0c;阿里云坐不住了&#xff0c;直接推出特价4核32G和4核16G的palworld专属游戏机&#xff0c;另外还可以申请免费3个月的4核8G无影…

系统移植,GNU命令,Uboot移植

一.GNU命令 1、addr2line 把程序地址转换为文件名和行号 做调试 2、ar 建立&#xff0c;修改&#xff0c;提取归档文件 3、Id:GNU arm-none-linux-gnueabi-ld start.o main.o -Tmap.lds -o uart.elf 链接器 4、as 主要用来编译GNU编译器gcc输出的汇编文件&a…

git本地分支的合并/切换分支时遇到的问题

目录 第一章、本地分支的切换测试1.1&#xff09;切换之前的master分支下文件内容1.2&#xff09;切换到develop分支后修改文件1.3&#xff09;切回master分支出现报错&#xff1a; 第二章、解决方式2.1&#xff09;方式1&#xff1a;commit提交修改2.2&#xff09;方式2&#…

电脑文件mfc140.dll丢失的解决方法指导,怎么快速修复mfc140.dll

mfc140.dll 文件的缺失是个普遍的问题&#xff0c;在日常使用中可能会时不时遇到。本文主要目的是详细介绍一旦遇到 mfc140.dll 文件缺失&#xff0c;应该如何进行下载和安装的步骤。不再赘言&#xff0c;下面就一起深入了解mfc140.dll丢失的解决方法指导。 一. mfc140.dll的作…