当前位置: 首页 > news >正文

E23.【C语言】练习:不创建第三个变量实现两个整数的交换

目录

题目条件

思路1(+ -)

思路2 (^)(XOR)

往期推荐

1.题目条件

禁止使用以上代码

2.思路1:+ -运算

a=a+b;
b=a-b;
a=a-b;

但这样有潜在的问题 :a,b存储的数字过大,a+b可能超过范围

 因此改用思路2

3.思路2:^运算(XOR)

复习异或运算:

异或运算==半加运算==不进位运算

0 XOR 0 == 0;0 XOR 1 == 1 XOR 0== 1; 1 XOR 1== 0 (1+1==10不进位,是0)

因此引出一系列定律:


归零定律:a XOR a == 0

恒等定律:a XOR 0 == a

交换定律:a XOR b == b XOR a

*(下面会用到)自反定律:a XOR b XOR a == b

*(下面会用到)结合定律:a XOR b XOR c == a XOR (b XOR c) == (a XOR b) XOR c


可以想到:

a=a^b;
b=a^b;
a=a^b;

解释:a=a XOR b; -->b=(a XOR b) XOR b == a XOR (b XOR b) == a XOR 0 == a 结合定律

-->a=a XOR b == (a XOR b) XOR a == a XOR b XOR a == b 自反定律

4.除此之外...

可以用汇编(这里以8086为例)利用栈交换数据

ax视作变量a,bx视作变量b

mov ax,1000

mov ss,ax

mov sp,0010   ;初始化栈顶

mov ax,001A

mov bx,001B

push ax

push bx

pop ax

pop bx

4.往期推荐

14.【C语言】初识操作符 上

15.【C语言】初识操作符 下



 

 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 锂电池生产工艺数字化的业务架构.pptx
  • 可视化图表与源代码显示的动态调整
  • vite静态资源处理,处理vite项目中src和url路径问题
  • DedeCMS-V5.7.82-UTF8织梦
  • 复现一下最近学习的漏洞(sqlab 1-10)
  • 速盾:爬虫攻击和cc攻击的区别是什么?
  • Git在日常项目中的实用技巧
  • 汉诺塔(C++)
  • 2024华数杯数学建模A题完整论文讲解(含每一问python代码+结果+可视化图)
  • 总线学习4--UART
  • pom.xml和.m2的setting的区别?
  • 【秋招笔试】24-07-27-OPPO-秋招笔试题(后端卷)
  • ES相关介绍与扫盲
  • 【C语言】C语言期末突击/考研--详解一维数组与字符数组
  • 罗杰斯的逆势投资:破而后立
  • 深入了解以太坊
  • 【140天】尚学堂高淇Java300集视频精华笔记(86-87)
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • gcc介绍及安装
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • Solarized Scheme
  • 大数据与云计算学习:数据分析(二)
  • 利用jquery编写加法运算验证码
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 1.Ext JS 建立web开发工程
  • raise 与 raise ... from 的区别
  • 没有任何编程基础可以直接学习python语言吗?学会后能够做什么? ...
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • # 利刃出鞘_Tomcat 核心原理解析(八)-- Tomcat 集群
  • #include
  • #传输# #传输数据判断#
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (1)Android开发优化---------UI优化
  • (3) cmake编译多个cpp文件
  • (9)STL算法之逆转旋转
  • (二)延时任务篇——通过redis的key监听,实现延迟任务实战
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • (附源码)ssm航空客运订票系统 毕业设计 141612
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (九)c52学习之旅-定时器
  • (六)DockerCompose安装与配置
  • (每日一问)基础知识:堆与栈的区别
  • .gitignore文件---让git自动忽略指定文件
  • .NET Framework 4.6.2改进了WPF和安全性
  • .net web项目 调用webService
  • .NET 的程序集加载上下文
  • .NET/C# 获取一个正在运行的进程的命令行参数
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地定义和使用弱事件
  • .NET/C# 中你可以在代码中写多个 Main 函数,然后按需要随时切换
  • .NET3.5下用Lambda简化跨线程访问窗体控件,避免繁复的delegate,Invoke(转)
  • .NET版Word处理控件Aspose.words功能演示:在ASP.NET MVC中创建MS Word编辑器
  • .net连接oracle数据库
  • /proc/vmstat 详解
  • /使用匿名内部类来复写Handler当中的handlerMessage()方法