不允许创建临时变量交换两个变量的内容
在学习C语言的时候,涉及到两个变量值的交换,其中用到临时变量。如果在没有临时变量的情况下,该如何做呢?
方法一:C语言提供的异或运算就可以实现这样的操作。异或运算符“^”也称“XOR”运算符,它的规则是:若参加运算的两个二进位同号,则结果为0(假);异号为1(真)。
即: 0 ^ 0 = 0,
0 ^ 1 = 1,
1 ^ 0 = 1,
1 ^ 1 = 0。
例如:a=5, b=9, 要想交换a和b的值,我们可以这样做:
a = a ^ b;
b = b ^ a = b ^ a ^ b = a (此时已经将a的值赋给了b)
a = a ^ b = a ^ b ^ a = b (将b的值赋给了a,交换完成)
C语言代码如下:
# include <stdio.h>int main()
{int a, b;scanf("%d %d", &a, &b);a = a ^ b;b = b ^ a;a = a ^ b;printf("交换后的值为:");printf("%d %d\n", a, b);return 0;
}
方法二:第二种方法是加减法,其实原理和第一种方法如出一辙。
即:a = a + b;
b = a - b = a + b - b = a; (将a赋值给了b)
a = a - b = a + b - a = b; (将b赋值给了a)
C语言代码如下:
# include <stdio.h>int main()
{int a, b;scanf("%d %d", &a, &b);a = a + b;b = a - b;a = a - b;printf("交换后的值为:");printf("%d %d\n", a, b);return 0;
}
干货小知识: sizeof 在 计算变量所占空间大小时,括号可以省略,而计算类型(模子)大小时不能省略。
转载于:https://blog.51cto.com/814193594/1697516
不允许创建临时变量交换两个变量的内容相关推荐
- php比较两个变量的值_总结PHP不用第三个变量交换两个变量的值的几种方法
"PHP不用第三个变量交换两个变量的值"这个题看到过好多次了,看来面试确实喜欢考这道题.今天,对于这个题目,我自己总结了几种方法,可能不全,大家来互相补充. 有些仅适用于字符串,方 ...
- C++不借助第三变量交换两个变量的值
C++不借助第三变量交换两个变量的值 源代码: #include<iostream> using namespace std; int main(){int x,y;cout<< ...
- PHP中不用第三个变量交换两个变量的值
相信大家在PHP面试或者学习中经常会遇到这个问题就是"不用第三个变量来交换两个变量的值",今天正对这个问题来讨论一下: 第一种方法:首先会想到的 这种方法简单可行,顺利的交换了两个 ...
- 不使用第三变量交换两个变量的值
在 Java 中,经常会需要交换两个变量的值,我们一般是使用第三变量完成,比如 temp = a; a = b; b = temp; 这样的写法确实能达成目标,但因此而引入了第三变量,对资源的消耗增加 ...
- 不借助第三方变量交换两个变量的值(多种方法)
转载自:https://blog.csdn.net/kangkermit/article/details/21371159 通常我们的做法是(尤其是在学习阶段):定义一个新的变量,借助它完成交换.代码 ...
- 不用引入第三变量交换两个变量的值
前几天发现了一个问题:有人告诉我,要进行变量交换,就必须引入第三变量! 假设我们要交换a和b变量的值,如果写成 int a=5,b=10; a=b; b=a; 那么结果就是两个都是10,理由不言而喻. ...
- 不使用第三个变量交换两个变量的值
小结一下: 给出两个变量:var a = 1, b = 2; 方法一: a = a + b; b = a - b; a = a - b; a, b 的值已经交换. 方法二: a = a ^ b; b ...
- 不用临时变量交换两个变量的值
在学习C语言的时候,涉及到两个变量值的交换,其中用到临时变量. 类似于: temp=a;a=b;b=temp; 这样的语句,如果在没有临时变量的情况下,该如何做呢? 网络上的人们给出了两种方法: 一. ...
- C++:不用申请变量交换两个变量的值
zz:http://yangjiayu.com/archives/83 http://hi.baidu.com/sunjoe/blog/item/895aa809d916fb226b60fba5.ht ...
最新文章
- Linux下锁用户与解锁问题
- :new与:old的用法
- 软键盘挡住EditText
- app启动页数秒加载 代码_iOS 底层探索 - 应用加载
- QT的QLinkedListIterator类的使用
- IO多路转接之poll
- 轻松实现突破网管限制(SoftEther实际应用)
- 互联网晚报 | 2月28日 星期一 |​工信部:最大限度降低缺芯影响;​工信部:今年新建5G基建60万个...
- html 去文本框中的双引号_前端·HTML基础
- VM : linux虚拟机上挂在U盘
- python 接口自动化测试_Python-基于数据驱动的接口自动化测试
- SWIFT学习笔记01
- 编写一个程序解决选择问题。令k=N/2。
- c语言中常用符号,C语言中常用的符号.doc
- 在类中用class时数据是共有还是私有_C++判断题题库1
- Linux下rpm安装软件
- 【黑苹果】联想Lenovo ThinkPad E550+i55200U+macos10.13.x efi文件下载
- 2018java面试(1)- 自我介绍和项目介绍
- 八、Servlet容器
- Html+Css+Js轮播图实现
热门文章
- MySQL命名、设计及使用规范《MySQL命名、设计及使用规范》
- MongoDB安装的坑
- Android自定义视图二:如何绘制内容
- ASP.NET MVC中,通用的异常处理
- SparkSql之DataFrame操作
- 一个通用的单元测试框架的思考和设计02-设计篇
- RHEL5***检测系统(IDS)snort的安装与配置,建议用BASE做控制台
- Delphi 与 DirectX 之 DelphiX(80): TDIB.BlendPixel();
- spring随笔(三)DataBase
- css选择指定class的元素