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

语言的变量交换

不用第三个变量交换两个变量在面试题或者笔试题中无数次被提到,事实上,有些答案是理论性的,不是准确的。以整型为例,如下对比不同交换方式的差异。

不同的交换方式

  • 利用中间变量
    c = a;
    00C02533 8B 45 F8 mov eax,dword ptr [a]
    00C02536 89 45 E0 mov dword ptr [c],eax
    a = b;
    00C02539 8B 45 EC mov eax,dword ptr [b]
    00C0253C 89 45 F8 mov dword ptr [a],eax
    b = c;
    00C0253F 8B 45 E0 mov eax,dword ptr [c]
    00C02542 89 45 EC mov dword ptr [b],eax
  • xchg汇编
    __asm xchg eax, a
    __asm xchg eax, b
    __asm xchg eax, a
  • 不用中间变量
    a = a ^ b;
    00AA10B0 mov edx,dword ptr [b]
    00AA10B3 mov ecx,edx
    00AA10B5 xor ecx,dword ptr [a]
    b = a ^ b;
    00AA10B8 xor edx,ecx
    00AA10BA mov eax,edx
    00AA10BC mov dword ptr [b],edx
    00AA10BF xor eax,ecx
    a = a ^ b;

不能仅仅通过指令个数确定三者的效率。


微风不燥,阳光正好,你就像风一样经过这里,愿你停留的片刻温暖舒心。

我是程序员小迷(致力于C、C++、Java、Kotlin、Android、iOS、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享),若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢,您的支持是我们为您提供帮助的最大动力。

欢迎关注。助您在编程路上越走越好!

http://www.lryc.cn/news/449528.html

相关文章:

  • 【muduo源码分析】「阻塞」「非阻塞」「同步」「异步」
  • 顶顶通呼叫中心中间件-机器人话术挂机后是否处理完成事件
  • Springboot Mybatis 动态SQL
  • ORM的了解
  • 关于大模型的10个思考
  • CFR( Java 反编译器)---> lambda 表达式底层实现机制
  • 《C++多态性:开启实际项目高效编程之门》
  • UDS_5_输入输出控制功能单元
  • CAD快捷键
  • Spring6梳理12——依赖注入之注入Map集合类型属性
  • 基于SpringBoot校园失物招领系统设计与实现
  • 推荐4款2024年热门的PDF转ppt工具
  • [深度学习]卷积神经网络CNN
  • 从零开始,Docker进阶之路(三):Docker镜像与命令
  • 【计算机网络】网络层详解
  • 后端开发刷题 | 最小的K个数(优先队列)
  • 【JavaEE】——阻塞队列,生产消费者模型(较难)
  • makefile和CMakeLists/C++包管理器
  • STM32 通过软件模拟 I2C 驱动 24Cxx 系列存储器
  • Go语言匿名字段使用与注意事项
  • 2024最新!!Java后端面试题(2)看这一篇就够了
  • 超好用的10款视频剪辑软件,从入门到精通
  • python股票因子,交易所服务器宕机,量化交易程序怎么应对
  • 瑞芯微RK3566鸿蒙开发板Android11修改第三方输入法为默认输入法
  • 使用nest+typeorm框架写数据库导致mysql的binlog暴增记录
  • 组合逻辑元件与时序逻辑元件
  • 天龙八部怀旧单机微改人面桃花+安装教程+GM工具+虚拟机一键端
  • docker管理
  • electron教程(三)窗口设置
  • 图像增强论文精读笔记-Deep Retinex Decomposition for Low-Light Enhancement(Retinex-Net)