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

【算法与数据结构】异或运算

异或运算

文章目录

      • 异或运算
    • @[toc]
        • 1.基础位运算
          • 按位与 `&`
          • 按位或 `|`
          • 按位异或 `^`
          • 按位取反 `~`
        • 2.异或运算的性质(重点)
        • 3.基于异或运算的常用算法
          • 算法1:交换两数
          • 算法2:提取某个数二进制上最右的1
        • 4.例题

1.基础位运算
按位与&

规则:两位全1才得1,有0则0

0&0=0 0&1=0 1&0=0 1&1=1
按位或|

规则:有1就为1,全0才0

0|0=0 0|1=1 1|0=1 1|1=1
按位异或^

规则:相同为 0,不同为 1

0^0=0 0^1=1 1^0=1 1^1=0
按位取反~

规则:所有二进制位 0、1 翻转

2.异或运算的性质(重点)

异或运算符:^

运算规则(按二进制每一位单独计算):

  • 相同为 0,不同为 1
    • 0 ^ 0 = 0
    • 0 ^ 1 = 1
    • 1 ^ 0 = 1
    • 1 ^ 1 = 0

例如:

print(3^5)# 3 二进制:011# 5 二进制:101# 异或结果:110 → 6

设 a、b 为任意整数:

  1. 自异或清零:a ^ a = 0
  2. 任何数异或 0 不变:a ^ 0 = a
  3. 交换律:a ^ b = b ^ a
  4. 结合律:(a ^ b) ^ c = a ^ (b ^ c)
  5. 消去性质:a ^ b ^ a = b

3.基于异或运算的常用算法
算法1:交换两数
a=4b=3a=a^b b=a^b a=a^bprint(a,b)# 结果:3, 4

但是在python里面直接用a, b = b, a就好了。

算法2:提取某个数二进制上最右的1

defrightone(a):return(~a+1)&aprint(rightone(6),rightone(10),rightone(7),rightone(8))#结果2218

6 → 110,输出2

10 → 1010,输出2

7 → 0111,输出1

8 → 1000,输出8


4.例题

给定一组整数数组:

  1. 情况 1:仅有一种数出现奇数次,其余所有数都出现偶数次

    要求找出这个唯一出现奇数次的数字。

    (思路:相同数异或结果为0,0异或任意数等于它本身,把数组所有数依次异或,最终结果就是这个出现奇数次的数)

    deffindnumber(mylist):a=0foriinmylist:a=a^ireturnaprint(findnumber([3,3,3,3,4,4,5,5,5,2,2]))# 结果:5
  2. 情况 2:有两种不同的数各自出现奇数次,其余所有数都出现偶数次

    要求找出这两个出现奇数次的数字。

    (思路:如果把全部数异或会得到这两个数的异或值(因为是两种不同的数,异或结果一定非0,那么这两个数一定在二进制某位上不同),找到异或结果二进制里某一位为1的位置(说明这一位上这两个数二进制数不同,按这一位把数组分成两组(这一位上是1的一组,是0的一组),两个目标数一定会被分到不同组,每组内部再分别全员异或,就能分别求出两个目标数。

    deffind_number(mylist):a=0c=0foriinmylist:a=a^i b=(~a+1)&aforjinmylist:ifj&b==b:c=c^jreturn[c,a^c]print(find_number([3,3,3,3,4,4,5,5,5,2,2,1,1,1,1,1]))# 结果:[5, 1]c=c^jreturn[c,a^c]print(find_number([3,3,3,3,4,4,5,5,5,2,2,1,1,1,1,1]))# 结果:[5, 1]
http://www.jsqmd.com/news/1161867/

相关文章:

  • Beyond Compare 5永久激活完整指南:3种方法解锁专业版功能
  • 3步解锁国家中小学智慧教育平台电子教材:免费下载终极指南
  • 零基础教程:Codex + DeepSeek V4 本地完美接入指南(Codex Helper 图文详解)
  • 行业权威实测|2026海口黄金回收合规机构评级报告 - 奢侈品回收中心
  • 9种网盘直链解析方案:重新定义你的文件下载体验
  • 【计算机大数据毕业设计案例】基于 Python 的内蒙古网红旅游景区数据分析系统的设计与实现 基于 Python 的内蒙古草原沙漠旅游数据统计系统(程序+文档+讲解+定制)
  • RAG与SAG-检索增强与搜索增强深度对比分析
  • SH9全息语义场与层级化动力学HSF-HD:智能的几何物理学(世毫九实验室原创理论)
  • 高并发 - 配置
  • Android Studio中文语言包深度解析:5步实现开发环境本地化优化
  • Adobe-GenP 3.0终极指南:轻松解锁Adobe全家桶完整功能
  • Prompt版本管理与A/B测试的工程化方案:从手工调参到系统化迭代
  • 2026 闲置铂金钻石黄金一站式回收,合肥本地老店实名交易资金安全有保障 - 奢侈品交易观察员
  • Ratchet API完全手册:Tensor操作与WebGPU加速指南
  • 仅限内部技术团队流通:Ollama Open WebUI高危漏洞应急响应清单(CVE-2024-XXXXX绕过方案+补丁级配置封禁)
  • 【Notion×ChatGPT知识引擎】:2024唯一经生产环境验证的RAG轻量化方案(含API密钥安全隔离协议)
  • 工厂生产合规难?AIPS用AI把流程“焊死”在计划里
  • 中国1951-2025年水分可靠性数据集
  • openGauss ARM架构优化实践:原子操作lse指令的性能提升效果
  • 如何快速制作专业扫描效果PDF:3分钟本地转换终极指南
  • 广西粉笔公考机构客观评测 | 七年本土化教研,如何适配三类考生的备考需求?
  • CellChat自定义分析流程:如何扩展和定制你的分析需求
  • Kimi的中文推理优势被高估?Perplexity的学术溯源能力被严重低估!287篇论文交叉验证结果震撼发布
  • 工程消防阀门十大靠谱品牌汇总,资质齐全品牌梳理 - 博客湾
  • 深入理解eulerfs哈希表目录:高效文件查找的秘密武器
  • UE4SS深度解析:如何通过注入式脚本系统彻底改变Unreal Engine游戏逆向工程
  • 3步完成Android Studio中文界面切换:告别语言障碍的完整解决方案
  • 法兰毛坯供货商怎么选?2026 锻造 / 冲压 / 大口径法兰毛坯实力厂家解析 - 品牌推荐大师1
  • OpenClaw2.7.9 多系统部署教程 Windows/macOS/Linux 一键安装实操(含安装包)
  • 河南 CPPM 报名授权(众智商学院)课程中心 - 众智商学院cppm官方