常用技巧 —— 位运算 —— 异或运算实现两个数的交换
【概述】
交换变量时,通常是借助一临时变量来赋值实现
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;
}
【异或运算性质】
其实现基于异或运算的如下性质:
- 可交换性:a^b=b^a
- 可结合性:a^b^c=(a^b)^c=a^(b^c)
- 自身进行异或运算值为零:a^a=0
- 与 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;}
}
常用技巧 —— 位运算 —— 异或运算实现两个数的交换相关推荐
- 【C/C++】异或操作巧妙实现两个数的交换操作
今天在看OpenGL加载TGA格式图像用作纹理的代码时,看到关于RGB(A)顺序转换的一行代码时,捉一开始感到很困惑,后来想了想,就是实现交换操作. 原始代码: texture->imageDa ...
- c语言异或实现交换原理,使用异或运算符实现两个数交换原理
使用异或运算符实现两个数交换原理 子不语 • 2019 年 12 月 21 日 使用异或运算符实现两个数交换原理 可以使用异或运算符实现两个数交换#include using namespace st ...
- 实现两个数的交换(异或,加减)
1. 通常我们通过设置临时变量来实现两个数的交换,如下: void swap(int *a,int *b){int temp;temp=*a;*a=*b;*b=temp;} 2.还可以通过异或来实现两 ...
- 常用技巧 —— 位运算
[概述] 在计算机中,数据都是以二进制形式存储的,因此位运算实质就是对整数在内存中的二进制位直接进行操作. 灵活使用位运算,不仅能有效的提高程序的效率,而且还能为代码提供亮点. 此外,在程序设计竞赛中 ...
- 常用技巧 —— 位运算 —— 位运算基础
[与运算] 与运算常用于二进制的取位操作,其用符号 & 表示,相同位的两个数字都为1,则为1,若有一个不为1,则为0. 例如:00101 & 11100 = 00100 其会将两个十进 ...
- 位运算--异或运算XOR
c++编程中的基础数学问题 02位运算–异或 今天分享一下在编程当中尤其是在数学部分非常重要的一个部分支–位运算.别看位运算就那么几个简单的运算符号,如果能好好利用就能特定的问题中大放异彩. 这里我们 ...
- 常用技巧 —— 位运算 —— 异或 1 的妙处
由以下两张图可以得出一一般性规律:如果是一个偶数 ^ 1,那么结果是偶数 +1:如果是一个奇数 ^ 1,那么结果是奇数 -1
- 常用技巧 —— 位运算 —— 位运算的应用
1.lowbit:计算一个数字 x 二进制下最低位 1 对应的值 方法: int lowbit(int x){return x&(-x); } lowbit 利用了补码的特性:正数的补码是其自 ...
- 异或运算和几个经典题目解析
认识异或运算 异或运算就记成无进位相加 0 1 1 1 0 1 1 1 0 异或运算满足交换律和结合律 同样一批数,不管选择什么样的顺序做异或运算,最后结果一定是一个 如何不使用额外的变量交换两个数 ...
最新文章
- SANS:2018年SOC调查报告
- 鸿蒙系统matepad,C位鸿蒙今日发布,华为WATCH 3、MatePad Pro抢先剧透
- 算法练习day5——190322(快排、建堆、调整堆)
- 关闭浏览器网页触发事件_浅析浏览器渲染和 script 加载
- c语言教程苏小红,《数据结构(C语言)》苏小红 课本案例
- 数据结构上机实践第14周项目1(4) - 验证算法(平衡二叉树)
- 《Android 第1行代码》读后感—第11章【Android 特色开发——基于位置的服务】
- 北斗/GPS模块输出的NMEA 0183语句详解
- 网页国际化处理(中英文切换)
- mysql5.6卸载干净_Mysql完全干净卸载教程
- 超详细的Mac重装系统教程!让重装系统变得简单起来!
- 计算机组装与维护毕业论文范文,计算机应用毕业论文 计算机组装与维护
- iOS UI切图@1x、@2x、@3x的实际尺寸
- CTF Just Click
- 创宇猎幽斩获“2022年网络安全优秀创新成果大赛”三等奖!
- Java数据类型和变量
- 精通 Grails: 用 JSON 和 Ajax 实现异步 Grails
- 一、在GPU上执行运算
- 计算机论文原文+翻译
- 计算机网络基础三种交换,数据传输的三种交换方式
热门文章
- 盘点20个最好的数据科学Python库(附链接)
- 不结婚不生孩子,离婚率15连涨,中国正在步入“低欲望社会”吗?
- Simulink之单管非隔离直流斩波器
- 半年辞退30多个程序员,大厂“开猿节流”太狠了!
- 你的消息队列如何保证消息不丢失,且只被消费一次,这篇就教会你
- 漫画:从修灯泡来看各种 IT 岗位,你是哪一种?
- 每周四JEECG社区公开课:微信公众账号运营(jeewx使用)入门讲解
- 第三章 对象与JSON
- Java描述设计模式(23):访问者模式
- 基于SpringCloud实现Shard-Jdbc的分库分表模式,数据库扩容方案