当遇到交换两个变量的时候,我们通常使用的是借助第三方变量实现两个数的交换。那么如果不使用第三方变量时,该怎么操作呢。

下面有两种方法:

1、通过已有的两个变量之间的加或减实现:

这种方法对于两个都是无限接进int取值范围,而相加超出int取值范围的情况不适用。

2、通过异或实现(异或符号为^)

*******************************************************************************************************

关于^:

异或的运算法则,相当于不带进位的二进制加法。二进制下用1表示真,0表示假,则异或的运算法则为:0异或0=0,1异或0=1,0异或1=1,1异或1=0(同为0,异为1),这些法则与加法是相同的,只是不带进位。

第一个数 符号 第二个数 结果
0 ^ 0 0
0 ^ 1 1
1 ^ 0 1
1 ^ 1 0

如:

num1 = 5,对应的二进制为(101); num2 = 7,对应的二进制为(111);

num1=num1^num2=2; 即二的平方位1^1=0,二的一次方位0^1=1,二的0次方位1^1=0;得到(010)即为2。

num2 = num1 ^ num2=5 ;相当于num2=num1^num2^num2;二的平方位1^1^1=1(此处无论num2的二的平方位是0还是1,异或运算后都为0,故得到的肯定与原num1的二的平方位相同,同理其他位置全部也都是原num1的数);二的一次方位0^1^1=0;二的0次方位1^1^1=1.;得到(101)即为5.

num1 = num1^num2=7; 相当于num1 = num1^num2^num1^num2^num2=num2=7.

此方法同样实现了两个数互换。

*******************************************************************************************************

由于^符号是不进位的,所以即使两个都无限接进int取值范围的数。通过^运算,也不会超过int取值范围。

新手,懂得不是很多,如有错误或者更好的方法,请各位不吝赐教!!!!!!!!!

转载于:https://www.cnblogs.com/alexanderthegreat/p/6657892.html

如何不运用第三方变量实现两个数的交换相关推荐

  1. 用指针和函数的方法完成两个数的交换

    <程序设计基础实训指导教程-c语言> ISBN 978-7-03-032846-5 p142 7.1.2 上级实训内容 [实训内容6]用指针和函数的方法完成两个数的交换 传递规则:主函数 ...

  2. 【c语言】输入两个数,交换这两个数后,再输出

    <程序设计基础实训指导教程-c语言>杨莉 龚义建 科学出版社 ISBN 978-7-03-032846-5 p9 2.1.2 上机实训内容 [实训内容3] 编程实现:输入两个数,交换这两个 ...

  3. 指针,指针:分装一个函数,实现两个数的交换。 指向固定的区域

    1.指针的引入 //第9行,取值运算符*,他把后面跟的内存地址中的数据"取出来": 2.指针变量的引入 什么是指针变量:存放地址的变量 什么是指针变量:存放指针的变量 指针 = 地 ...

  4. 实现两个数的交换(异或,加减)

    1. 通常我们通过设置临时变量来实现两个数的交换,如下: void swap(int *a,int *b){int temp;temp=*a;*a=*b;*b=temp;} 2.还可以通过异或来实现两 ...

  5. 【C/C++】异或操作巧妙实现两个数的交换操作

    今天在看OpenGL加载TGA格式图像用作纹理的代码时,看到关于RGB(A)顺序转换的一行代码时,捉一开始感到很困惑,后来想了想,就是实现交换操作. 原始代码: texture->imageDa ...

  6. (指针详解1)例:用函数编写两个数的交换

    ​​​前言: 我们在初学c语言时都会遇到的一个题目,那就是交换两个数字的大小,我们需要定义两个变量保存两个值,再定义一个temp进行中间值保存 int temp=0: int a=10: int b= ...

  7. (1)输入直角三角形的两个直角边的长度a,b,求斜边c的长度 (2) 编写一个程序,用于两个数的交换

    (1)输入直角三角形的两个直角边的长度a,b,求斜边c的长度 (2) 编写一个程序,用于两个数的交换 import math a = float(input('请输入直角三角形直角边a的长度:')) ...

  8. 实现两个数交换python_编写一个程序,用于实现两个数的交换。_学小易找答案

    [判断题]定喘穴定位在胸部 (10.0分) [其它]实现实心等腰三角形图案打印输出. [其它]编写一个程序,用于实现两个数的交换. [其它]实现空心等腰三角形图案打印输出. [判断题]表寒肺热证的代表 ...

  9. 编写一个程序,用于实现两个数的交换。

    编写一个程序,用于实现两个数的交换. x=int(input("请输入数字a:\n")) y=int(input("请输入数字b:\n")) int () c= ...

  10. c语言不用第三个变量 实现两个数的对调,下面程序功能是不用第三个变量,实现两个数对调操作 ....docx...

    下面程序功能是不用第三个变量,实现两个数对调操作 ... [3.1]下面程序的功能是不用第三个变量,实现两个数的对调操作.#include main(){ int a,b:scanf("%d ...

最新文章

  1. python装饰器改变命运
  2. 浅析ThinkPHP缓存之快速缓存(F方法)和动态缓存(S方法)
  3. Vue学习(slot、axios)-学习笔记
  4. Wget CVE-2014-4877:FTP 符号链接任意文件系统访问
  5. android判断主线程_android中从子线程切换到主线程,但是显得代码很臃肿,请教大牛是怎么自定义的?...
  6. 传值类型_Java内存管理:Stackoverflow问答-Java是传值还是传引用(十一)
  7. RedisUtil - Redis功能介绍,五种数据类型的使用,Spring和Redis的集成
  8. 旅游网站进行邮件订阅的七大步骤讲解
  9. python读取modis数据
  10. mysql 多版本删除_高性能MySQL(四):多版本并发控制
  11. 【数据分析】数据分析方法(一):5W2H 分析方法
  12. SharePoint传出电子邮件配置
  13. 六兆年と一夜物語 jzoj3501 最短路
  14. 树形DP--bzoj4987: Tree
  15. 阿里云一键部署 Hadoop 分布式集群
  16. React-滑条组件使用
  17. 一位浙大教授令人寒心的演讲,说出了真话!
  18. php如何在微信公众号项目中,跳转到公众号关注页面
  19. PHP实现sha-256哈希算法
  20. 单片机开发无线控制系列-手机无线超声波测距

热门文章

  1. 入门 ggplot2 的图形语法
  2. [Python3] 面向对象编程
  3. PHP大批量插入数据库的3种方法和速度对比
  4. 【Zookeeper】源码分析之Watcher机制(一)
  5. js,jquery的数字型字符串变量比较大小
  6. 【NodeJS 学习笔记03】先运行起来再说
  7. .NET:默认是按值传递的
  8. boost::array与std::vector使用与性能
  9. 小米有品员工签军令状,自动放弃年终奖!
  10. Centos7升级gcc版本方法之一使用scl软件集