当前位置:网站首页>交换两个整型变量的三种方法
交换两个整型变量的三种方法
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;
}
上述三种交换两个整型变量的方法希望可以帮助大家开拓视野!!!
边栏推荐
猜你喜欢
随机推荐
用平衡二叉搜索树解决硬木种类问题
Offensive and defensive world - fakebook
方案 | 医疗单据OCR识别,为医保零星报销打造安全屏障
docker部署redis容器问题
VSCode代码格式化快捷键及保存时自动格式化
The basic method of use in the volatile in the C language
【项目问题】Ionic开发移动端app,手把手教你如何打包生成apk
DBeaver 22.1.4 released, a visual database management platform
ES8 | async和await
Offensive and defensive world - lottery
双馈风电机组备用容量控制策略研究
百度飞浆EISeg高效交互式标注分割软件的使用教程
分清成员函数非成员函数和友元函数
mockserver使用
idea big data tools 提交flink任务
各位大佬想问下, flinkcdc采集oracle我看了下延迟大概两分钟左右,想问下有啥解决方法吗
文献学习(part33)--Clustering by fast search and find of density peaks
Go 匿名字段与实现重写方法
lvm建立逻辑卷
多态案例三电脑组装