当前位置:网站首页>交换两个整型变量的三种方法
交换两个整型变量的三种方法
2022-08-08 08:39:00 【徐憨憨!】
在学习C语言的过程中,我们都会遇到的一个题目就是:交换两个整型的变量;今天我将讲解三种方法供大家开拓视野!!!
法一:
新建一个整型变量c,假设我们要交换a b两个整型变量的值,我们先把a变量的内容存储到c当中,再把b变量的内容存储到a当中,最后再把c变量的内容存放在b中,这样就实现了a b两个整型变量的交换
图解如下:
代码如下:
int main()
{
int a = 10;
int b = 20;
int c = 0;
printf("交换前:a = %d b = %d\n", a, b);
//交换
c = a;
a = b;
b = c;
printf("交换后:a = %d b = %d\n", a, b);
return 0;
}
上述方法使用了一个新的变量c,360公司在某一年招聘的笔试题规定在不创建第三个变量的条件下交换两个整数,这该怎么做?
法一:
int main()
{
int a = 10;
int b = 20;
printf("交换前:a = %d b = %d\n", a, b);
//交换
a = a + b;//a=10+20=30
b = a - b;//b=30-20=10
a = a - b;//a=30-10=20
printf("交换后:a = %d b = %d\n", a, b);
return 0;
}
这种方法编译结果正确,但是这种方法有一个缺陷,当a和b特别大,a+b的结果造成溢出的时候,这种方法就会编译错误,所以我们来看一下法二的优化方法。
法二:
法二将利用到一个操作符:^按位异或 ,我们都知道一个整型变量在计算机中是按照二进制的补码存储的,如3的二进制为:00000000000000000000000000000011,按位异或的意思就是两个整数的二进制位按位异或,若二进制位相同则为0否则为1,比如3和5按位异或的二进制序列为:00000000000000000000000000000110为6
那么如何利用按位异或操作符交换两个整型变量呢?
我们得知道按位异或操作符的几个规律:
0^a = a
a^a = 0
且按位异或操作符满足交换律
即a^b^a = a^a^b
通过上述规律,我们可以来解决此问题
int main()
{
int a = 10;
int b = 20;
printf("交换前:a = %d b = %d\n", a, b);
//交换
a = a ^ b;//a=a^b
b = a ^ b;//b=a^b^b=a
a = a ^ b;//a=a^b=a^b^a=b
printf("交换后:a = %d b = %d\n", a, b);
return 0;
}
上述三种交换两个整型变量的方法希望可以帮助大家开拓视野!!!
边栏推荐
猜你喜欢
数学基础(一)矩阵对角化、SVD分解以及应用
67:第五章:开发admin管理服务:20:开发【解冻/冻结用户,接口】;(用户状态变更后,需要刷新用户状态,即变更用户会话信息:我们一般通过“删除redis中会话信息,强制用户重新登录“来做的;)
【项目问题】Ionic开发移动端app,手把手教你如何打包生成apk
手机APP测试流程规范和方法你知道多少?
【图像分类】2022-MaxViT ECCV
idea big data tools submit flink tasks
volatile在C语言中的基本使用方法
My MySQL installation that is how to solve
看顶级测工怎么玩转Apifox接口测试工具
Django+MySQL+HarmonyOS------------笔记二
随机推荐
要写脚本,编程不好不要紧--浅谈CTF中脚本的编写方法
lvm建立逻辑卷
jupyter lab安装、配置教程
Flink Record has Long.MIN_VALUE timestamp (= no timestamp marker). Is the time characteristic
What exactly happens after entering the URL in the browser?
机器学习理论及案例分析(part3)--聚类
面试官:工作中用过锁么?说说乐观锁和悲观锁的优劣势和使用场景
PhpStudy 2016搭建-DVWA靶场
Raspberry pie 】 【 without WIFI even under the condition of the computer screen
在数学里,minimum 和 minimal 有啥区别吗?
文件包含漏洞-知识点
SSRF漏洞
信息学奥赛一本通 1923:【03NOIP普及组】数字游戏 | 洛谷 P1043 [NOIP2003 普及组] 数字游戏
数据库调优:Mysql索引对group by 排序的影响
手机APP测试流程规范和方法你知道多少?
matlab simulink串级变比值模糊PID烟气脱硫浆液pH值控制
Interviewer: Have you ever used a lock at work?Talk about the advantages, disadvantages and usage scenarios of optimistic locking and pessimistic locking
【优化调度】基于粒子群实现并网模型下微电网的经济调度优化附matlab代码
golang-channel-一个基础channel并行操作的简单函数
Database_JDBC