在学习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=30b = a - b;//b=30-20=10a = a - b;//a=30-10=20printf("交换后: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^bb = a ^ b;//b=a^b^b=aa = a ^ b;//a=a^b=a^b^a=bprintf("交换后:a = %d b = %d\n", a, b);return 0;
}




上述三种交换两个整型变量的方法希望可以帮助大家开拓视野!!!

交换两个整型变量的三种方法相关推荐

  1. Python交换两个变量的三种方法

    一.借助于第三个变量(很常用) a = 5 b = 6c = 0 c = a a = b b = c print("a=%d,b=%d"%(a,b))#结果为:a=6,b=5 二. ...

  2. Python面试题-交换两个数字的三种方法

    Python实现两个数字交换 解法1 解法2 解法3 a=6 b=100 解法1 使用其他变量,最通用的方法 c=a a=b b=c 解法2 不使用其他变量,利算法节省内存空间 a=a+b b=a-b ...

  3. C语言交换两个数字的三种做法

    C语言交换两个数字的三种做法 1.借助中间变量法: void swap(int *a , int *b) {int temp;temp = *a;*a = *b;*b = temp; } 2.使用加减 ...

  4. PHP保留两位小数的三种方法

    PHP保留两位小数的三种方法 ps:本人亲测,阿里云2核4G5M的服务器性价比很高,新用户一块多一天,老用户三块多一天,最高可以买三年,感兴趣的可以戳一下:阿里云折扣服务器 /*** PHP保留两位小 ...

  5. Python除法保留两位小数点(三种方法实现)

    Python除法保留两位小数点(三种方法实现) 前言序锦 学过编程我们都知道,无论什么语言,其实都是相通的,,当我们学会了并掌握好了一种语言后,我们再去了解另外一种语言,其实就很容易了,今天我们就来一 ...

  6. 交换a,b值的三种方法

     给定两个数a=10,b=20交换a与b的值的三种方法 1.首先第一种是我们最容易想到的,定义一个空tmp,用其交换,在三个数按从小到大(或从大到小)排序输出时曾用到过 2.第二种方法,用加减法来 ...

  7. 计算两个数平均值的三种方法

    第一种方法: 思路:两数相加求和再除2 代码 int a=10;int b=20;int avg=0;avg=(a+b)/2;//平局值//或者avg=(a+b)>>1://右移表示除2, ...

  8. 计算两个数平均数的三种方法

    第一种方法 思路:两数相加然后除以2 参考代码: #include<stdio.h>int main(){ int a = 10;int b = 20;int aver = (a + b) ...

  9. js合并两个数组的三种方法

    js合并数组的三种方法 前提:两个数组a=[1,2,3,4].b=[5,6,7],将其合并为一个数组 1. concat //js的Array对象提供了一个叫concat()方法,连接两个或更多的数组 ...

最新文章

  1. sklearn解决回归问题
  2. Web安全1沙箱隔离
  3. 织梦channel标签currentstyle样式无效不起作用
  4. html中剪切图片所用插件,简单功能强大的jQuery图片剪裁插件Image Cropper
  5. ACL 2020 | 基于机器阅读理解框架的命名实体识别方法
  6. pgpool-II 高可用搭建
  7. 07树莓派下的浏览器
  8. Java基础——TreeSet
  9. SmallMQ实现发布
  10. 责任分配矩阵和raci的区别_数字音频处理器和调音台的区别是什么
  11. IT管理系统:让酒店更便宜
  12. 【SQL】数据库模糊查询
  13. macbook m1 vmware fusion 安装centos8
  14. 在不同领域,大家用爬虫怎么盈利的-Java网络爬虫系统性学习与实战系列(4)
  15. 23种开发设计模式总结,追求高内聚低耦合的编程思想。
  16. 无U盘win10安装Linux-Ubuntu系统
  17. VERSA VGG-4422-U-A120有一种幸福叫微笑
  18. Web前端系列技术之HTML基础(从入门开始)①
  19. 小学计算机软件介绍ppt,小学信息技术优秀课件
  20. 数据可视化-----标签云的实现

热门文章

  1. MarkDown使用总结
  2. android期末测试b卷,Android应用开发期末考试题
  3. 感恩与您同行,迈向美好未来 | 迅镭激光第二季度生日会&迎新会成功举办!
  4. 快速压缩工具Zstd
  5. 2021最新HarmonyOS鸿蒙系统应用开发之基础入门教程到实战—持续更新(第二节:鸿蒙OS系统分布式操作)
  6. linux 线程与进程的简单区别
  7. 通用高校排课算法研究
  8. OKEx公链OKChain 下一个DeFi跑马场?
  9. 求符合xyz-zyx=297的所有xyz,其中,y只可取1,输出xyz
  10. 随机数RNG使用说明