【概述】

交换变量时,通常是借助一临时变量来赋值实现

void exchange(int a,int b)
{int temp;temp=a;a=b;b=temp;
}

当采用异或运算时,实现两变量交换无需借助第三个临时变量

void exchange(int &a, int &b)
{a ^= b;b ^= a;a ^= b;
}

【异或运算性质】

其实现基于异或运算的如下性质:

  1. 可交换性:a^b=b^a
  2. 可结合性:a^b^c=(a^b)^c=a^(b^c)
  3. 自身进行异或运算值为零:a^a=0
  4. 与 0 异或时结果不变:a^0=a

【实现过程分析】

第一步:a = a ^ b;

完成后,a 的值为:a ^ b

第二步:b = a ^ b;

a 的值是 a ^ b,执行后,得到 b=(a ^ b) ^ b=a ^ (b ^ b)=a ^ 0=a

即运算后 b 的值为 a

第三步:a = a ^ b;

此时 a 的值仍然是 a ^ b,b 的值为 a,执行后,得到 a=(a ^ b) ^ a=a ^ a^ b=0 ^ b=b

即运算后 a 的值为 b

【注意事项】

进行交换时,如果 a、b 两变量的值相等,则会使得 &a、&b 指向同一地址,从而引发错误,因此需要判断两数是否相等。

void exchange(int &a, int &b)
{if(a!=b){a ^= b;b ^= a;a ^= b;}
}

常用技巧 —— 位运算 —— 异或运算实现两个数的交换相关推荐

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

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

  2. c语言异或实现交换原理,使用异或运算符实现两个数交换原理

    使用异或运算符实现两个数交换原理 子不语 • 2019 年 12 月 21 日 使用异或运算符实现两个数交换原理 可以使用异或运算符实现两个数交换#include using namespace st ...

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

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

  4. 常用技巧 —— 位运算

    [概述] 在计算机中,数据都是以二进制形式存储的,因此位运算实质就是对整数在内存中的二进制位直接进行操作. 灵活使用位运算,不仅能有效的提高程序的效率,而且还能为代码提供亮点. 此外,在程序设计竞赛中 ...

  5. 常用技巧 —— 位运算 —— 位运算基础

    [与运算] 与运算常用于二进制的取位操作,其用符号 & 表示,相同位的两个数字都为1,则为1,若有一个不为1,则为0. 例如:00101 & 11100 = 00100 其会将两个十进 ...

  6. 位运算--异或运算XOR

    c++编程中的基础数学问题 02位运算–异或 今天分享一下在编程当中尤其是在数学部分非常重要的一个部分支–位运算.别看位运算就那么几个简单的运算符号,如果能好好利用就能特定的问题中大放异彩. 这里我们 ...

  7. 常用技巧 —— 位运算 —— 异或 1 的妙处

    由以下两张图可以得出一一般性规律:如果是一个偶数 ^ 1,那么结果是偶数 +1:如果是一个奇数 ^ 1,那么结果是奇数 -1

  8. 常用技巧 —— 位运算 —— 位运算的应用

    1.lowbit:计算一个数字 x 二进制下最低位 1 对应的值 方法: int lowbit(int x){return x&(-x); } lowbit 利用了补码的特性:正数的补码是其自 ...

  9. 异或运算和几个经典题目解析

    认识异或运算 异或运算就记成无进位相加 0 1 1 1 0 1 1 1 0 异或运算满足交换律和结合律 同样一批数,不管选择什么样的顺序做异或运算,最后结果一定是一个 如何不使用额外的变量交换两个数 ...

最新文章

  1. SANS:2018年SOC调查报告
  2. 鸿蒙系统matepad,C位鸿蒙今日发布,华为WATCH 3、MatePad Pro抢先剧透
  3. 算法练习day5——190322(快排、建堆、调整堆)
  4. 关闭浏览器网页触发事件_浅析浏览器渲染和 script 加载
  5. c语言教程苏小红,《数据结构(C语言)》苏小红 课本案例
  6. 数据结构上机实践第14周项目1(4) - 验证算法(平衡二叉树)
  7. 《Android 第1行代码》读后感—第11章【Android 特色开发——基于位置的服务】
  8. 北斗/GPS模块输出的NMEA 0183语句详解
  9. 网页国际化处理(中英文切换)
  10. mysql5.6卸载干净_Mysql完全干净卸载教程
  11. 超详细的Mac重装系统教程!让重装系统变得简单起来!
  12. 计算机组装与维护毕业论文范文,计算机应用毕业论文 计算机组装与维护
  13. iOS UI切图@1x、@2x、@3x的实际尺寸
  14. CTF Just Click
  15. 创宇猎幽斩获“2022年网络安全优秀创新成果大赛”三等奖!
  16. Java数据类型和变量
  17. 精通 Grails: 用 JSON 和 Ajax 实现异步 Grails
  18. 一、在GPU上执行运算
  19. 计算机论文原文+翻译
  20. 计算机网络基础三种交换,数据传输的三种交换方式

热门文章

  1. 盘点20个最好的数据科学Python库(附链接)
  2. 不结婚不生孩子,离婚率15连涨,中国正在步入“低欲望社会”吗?
  3. Simulink之单管非隔离直流斩波器
  4. 半年辞退30多个程序员,大厂“开猿节流”太狠了!
  5. 你的消息队列如何保证消息不丢失,且只被消费一次,这篇就教会你
  6. 漫画:从修灯泡来看各种 IT 岗位,你是哪一种?
  7. 每周四JEECG社区公开课:微信公众账号运营(jeewx使用)入门讲解
  8. 第三章 对象与JSON
  9. Java描述设计模式(23):访问者模式
  10. 基于SpringCloud实现Shard-Jdbc的分库分表模式,数据库扩容方案