码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 通过位运算进行两个变量值的交换功能


    通过位运算进行两个变量值的交换功能

    一般交换方法

    通常的交换两个变量a,b的过程为

    int temp;
    temp=a
    a=b;
    b=temp;
    
    • 1
    • 2
    • 3
    • 4

    需借助上面的第3个临时变量temp.

    位运算交换方法

    采用下面的方法,对于给定两个整数a,b,下面的异或运算可以实现a,b的交换,而无需借助第3个临时变量:

        a = a ^ b;
        b = a ^ b;
        a = a ^ b;
    
    • 1
    • 2
    • 3

    这个交换两个变量而无需借助第3个临时变量过程,其实现主要是基于异或运算的如下性质:

    1. 任意一个变量X与其自身进行异或运算,结果为0,即X^X=0

    2. 任意一个变量X与0进行异或运算,结果不变,即X^0=X

    3. 异或运算具有可结合性,即abc=(ab)c=a(bc)

    4. 异或运算具有可交换性,即ab=ba

    位运算方法分析:

    1. 第一步:a = a ^ b; 完成后 a变量的结果为a ^ b

    2. 第二步: b = a ^ b;
      此时赋值号右边的a保存的是a ^ b的值,那么将赋值号右边的a用a ^ b替换,
      得到(a^b)^b = a ^(b^b) = a^0 = a,
      即经过第二步运算后b中的值为 a,即 b = a,将 a 换到了 b 里

    3. 第三步:a = a ^ b;
      此时赋值号右边的a保存的仍然是a ^ b的值,不变,而赋值号右边的 b 已经是 a 了,将赋值号右边的a,b分别进行替换,
      即此时赋值号右边a^b =(a^b)^a = a^b^a = a^a^b = 0^b = b, 该值赋值给a,即a=b
      即经过第三步运算后a中的值为b,即a=b,将b换到了a里.

    这样经过如上的三步骤,完成了交换两个变量a,b而无需借助第3个临时变量过程。

    是在不理解的话可以直接举个例子就明白了。

  • 相关阅读:
    基于Vue+SpringBoot的超市账单管理系统 开源项目
    goweb开发实战笔记(一)
    如何在启用Secure Boot的Ubuntu 22.04电脑中安装使用VirtualBox 6.1
    花一天时间做一个高质量飞机大战游戏,过万字Unity完整教程!漂亮学妹看了直呼666!
    MyBatis Mapper如何实现一个映射器呢?
    JUC-内存
    【实操篇】Linux实用指令总结
    python使用matplotlib.pyplot画图时总会提示“内核似乎挂掉了,很快就会自动重启”
    在威联通QTS5.1创建svn代码库
    软件定义存储不能打?这家成立刚三年的公司问鼎全球存储性能榜
  • 原文地址:https://blog.csdn.net/qq_41704415/article/details/126036012
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号