异或 XOR 运算是什么?为什么对于大多数人,不重要?

news/2026/1/22 0:12:23/文章来源:https://www.cnblogs.com/duyuanshang/p/19514400

目录
  • 1.异或 XOR 的基本概念
  • 2.实现一个加密解密器
  • 3.不引入三方变量,交换两个变量的值
  • 4.算法题,寻找重复的元素
  • 5.大名鼎鼎的异或链表

看看它的用法就知道了,没有一个普通人业务里能用到的。所谓有用,只有在 力扣 里刷题很有用,还有面试造飞机时哈哈。

⚠️ 本文完整版全文原文:https://www.ccgxk.com/emlog_dev/626.html

其实软件发展到今天, 能正常工作是第一位,不能正常工作的软件,根本没意义, 可读性和可维护性是第二位,性能是第三位, 不要过早优化, 当性能真正成为瓶颈的时候,才介入优化。---《高效编程的奥秘》

(当然,不是真实项目里完全没有,而是在偏业务的项目里作用基本等于 0,偏底层的则多一点,比如校验、纠错、加密算法,毕竟可逆嘛,但可维护性都会很差)

1.异或 XOR 的基本概念

首先第一个,某个内容 两次 异或 同一个数或内容,它会还原。

比如 Python 里:

>>> 23^12
27
>>> 23^12^12
23

这个特性,很适合让它作为一个加密解密器!

2.实现一个加密解密器

比如这样一个函数:

def xor_encrypt(message: str, key: int) -> str:result = []for ch in message:encrypted_char = chr(ord(ch) ^ key)  # 每个字符都和秘钥进行一次 XOR 运算result.append(encrypted_char)return ''.join(result)  # 最后拼接

那么,你就得到了一个最简单的加密器。

你有一个字符串 'aabbcc',你可以这样加密和解密。

password = 'aabbcc'
key = 67 # 秘钥
encypt = xor_encrypt(password, key)
print('加密后的结果:' + encypt)
print('解密后:' + xor_encrypt(encypt, key))-----
加密后的结果:""!!  
解密后:aabbcc

当然,在真正的密码学里,这种方式,充其量只算做混淆。很容易被破解造成攻击(比如频率分析),生产环境里不能这样使用。

(比如这个反面教材:网易云的缓存加密mp3文件给每一位进行 key= 163 的异或操作就可以还原出原来的文件,嘿嘿~ 当然,这个只防君子不防小人,又不影响他们赚钱.....)

但是,它依然算得上非常原始的加密算法。

3.不引入三方变量,交换两个变量的值

它的另一个巧妙用法是,能让我们不使用任何中间变量来交换两个变量的值!

如果只考虑整数,我们有三种经典方式,其中就包含异或,我们使用 JS 来写:

function swap(a, b) {  // 中间变量let tmp = a;a = b;b = tmp;return [a, b];
}function swap(a, b) {  // 加减法(只对整数起效)a = a + b;b = a - b;a = a - b;return [a, b];
}function swap(a, b) {  // 我们今天的 XOR 异或了!if (a === b) return [a, b];a ^= b;b ^= a;a ^= b;return [a, b];
}

毕竟在多数编程语言里,小数等特殊数值,都有精度丢失问题,第二种不适用,所以 异或 才是真正意义上的不引入第三方变量就能交换 A B 两个位置的数值的方法。

4.算法题,寻找重复的元素

还有,就是寻找重复元素。

这里运用的特性是,0 与任何数字异或都等于它本身。比如在 Python 里:

>>> 0^3
3
>>>0^2
2
>>>8^0
8
>>>0^8^8
0

如果我们有这样一个数组,[0, 1, 2, 3, 4, 5] 。

然后我们找一个数字,将其重复两遍。比如 [0, 1, 2, 2, 3, 4, 5]。

然后我们再打乱这个数组, [4, 2, 3, 1, 5, 2, 0] 。

请问,怎么能最快速的找到那个多出的重复数字是什么?那就要用到异或了!

很脑洞大开是不是,下面是使用 JavaScript 写的一个函数:

function findDuplicate(nums) {let x = 0const n = nums.length - 1  // 获取数组的长度for (let i = 0; i <= n; i++) {  // 第一次 XOR 异或x ^= i}for (const v of nums) {  // 第二次 XOR 异或x ^= v}return x
}

时间 O(n),空间 O(1),没有排序,没有 Map,没有额外结构,非常优雅。

原理很简单。

第一次异或:
0^0^1^2^3^4^5第二次异或(等同于):
0^0^1^2^3^4^5^0^1^2^3^4^5^2

没错,多出了一个最后那个 2,前面的都被两次异或了,已经都是 0 了,因此剩下的那个 2 就留下了。

这个特性,在现实的应用场景里,可以用于检测一组数据流,是否多发和少发,速度飞快!以及在储存内容时,快速发现有没有多写或少写一个数据块儿。

5.大名鼎鼎的异或链表

然后下面要讲的就是大名鼎鼎的异或链表了!

传统的链表,一般是双向链表,就像博客里看文章一样,每个节点里,存储着【上一篇】和【下一篇】的链接(指针)。

而异或链表,它不存储 2 个地址了,而是存储一个地址,就是【上一篇】和【下一篇】的两个地址(指针)的 XOR 异或。

这样,好处是:单纯在链表这个结构上,内存占用立马减少了一半。

但是,我们怎么遍历这个链表呢?

首先因为 0^x = x 嘛,所以 头 和 尾,储存的都是 0 和相临地址的异或,也就没有头和尾这个概念了。

由于很难区分头尾和其他节点在地址里的区别,因此我们会给出头和尾,然后你就根据这个异或的特性,就能马上一步步算出后续节点的地址.... 你找到头和尾了,你就能一下子算出来下一个了,直到走完。

但是,它并不实用。

可维护型超级差,中间坏一个节点,全局报废,不可维修!

内存从古至今就是很廉价的东西,没必要为了节省 50% 的地址储存大小,把整个可维护性、可读性完全抛弃。不过确实很有意思吧,是那些算法题里的一个考验大脑的工具。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1196807.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【课程设计/毕业设计】基于springboot+vue的医药管理系统【附源码、数据库、万字文档】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

计算机网络经典问题透视:数据流的平均速率,峰值速率和突发长度各表达什么意思?

第一章&#xff1a;基础定义与核心概念辨析在深入细节之前&#xff0c;我们首先需要建立清晰、准确的定义。这是所有后续分析和讨论的基础。1.1 平均速率&#xff1a;数据流的“长期性格”‍平均速率&#xff0c;顾名思义&#xff0c;是指数据流在一段相对较长的时间间隔内传输…

springboot_ssm842智慧家政在线预约管理系统的设计与实现ssm

目录具体实现截图智慧家政在线预约管理系统的设计与实现系统所用技术介绍写作提纲源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;具体实现截图 智慧家政在线预约管理系统的设计与实现 该系统基于SpringBoot和SSM框架开发&#xff0c;…

维普AI率高?手把手教你用工具稳降

维普AIGC检测高&#xff1f;6款工具帮你降到合格线 TL;DR&#xff1a;维普AIGC检测算法和知网不同&#xff0c;很多知网能过的工具在维普可能过不了。实测对维普效果最好的是嘎嘎降AI&#xff08;67%→9%&#xff09;&#xff0c;其次是比话降AI&#xff08;60%→12%&#xff0…

springboot_ssm835面向学生成绩分析系统--论文

目录 具体实现截图摘要 系统所用技术介绍写作提纲源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01; 具体实现截图 摘要 随着教育信息化的快速发展&#xff0c;学生成绩分析在教育教学管理中扮演着重要角色。传统成绩分析方式依赖人工统…

FIND_IN_SET()方法

一、基础用法说明 FIND_IN_SET(str, strlist) 函数的作用是&#xff1a;在 strlist&#xff08;逗号分隔的字符串&#xff09;中查找 str 的位置&#xff0c;返回值是数字&#xff08;找到则返回位置&#xff0c;从1开始&#xff1b;没找到返回0&#xff09;。 结合 MyBatis 的…

2026年,测试报告将由AI自动生成,你只需做决策

1.1 智能生成引擎的底层逻辑 动态日志分析&#xff1a;基于Transformer的日志语义理解模型&#xff08;如LogBERT&#xff09;实时解析测试过程数据 缺陷预测矩阵&#xff1a;集成历史缺陷库与代码变更特征训练的风险概率模型&#xff08;示例见下表&#xff09; 多模态呈现&…

硬核科普:从“教室点名”看懂 ARP 协议的全过程

作者&#xff1a;飞哥&#xff08;一个喜欢讲故事的全栈开发者&#xff0c;擅长把复杂的代码翻译成“人话”&#xff09; 关键词&#xff1a;ARP欺骗, ARP代理, 免费ARP ,ARP协议, 计算机网络, 网络安全1. 什么是 ARP&#xff1f; ARP (Address Resolution Protocol)&#xff…

负面提示词怎么写?Qwen-Image-2512-ComfyUI避雷经验

负面提示词怎么写&#xff1f;Qwen-Image-2512-ComfyUI避雷经验 1. 为什么负面提示词在Qwen-Image-2512中如此关键&#xff1f; 很多人用Qwen-Image-2512生成图片时&#xff0c;第一反应是&#xff1a;“这模型真强&#xff0c;细节太真实了&#xff01;”确实&#xff0c;它…

导师严选9个AI论文网站,专科生搞定毕业论文+格式规范!

导师严选9个AI论文网站&#xff0c;专科生搞定毕业论文格式规范&#xff01; AI 工具助力论文写作&#xff0c;专科生也能轻松应对 对于很多专科生来说&#xff0c;撰写毕业论文不仅是一项学术任务&#xff0c;更是一次心理和时间上的双重挑战。尤其是在面对格式规范、内容逻…

springboot_ssm836风俗文化管理系统--论文

目录 具体实现截图摘要 系统所用技术介绍写作提纲源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01; 具体实现截图 摘要 随着信息技术的快速发展&#xff0c;传统风俗文化的保护与传承面临新的机遇与挑战。为提升文化管理的效率与规范性…

springboot_ssm849的网上报名系统SSM

目录具体实现截图摘要系统所用技术介绍写作提纲源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;具体实现截图 摘要 网上报名系统基于SpringBootSSM框架开发&#xff0c;整合了Spring、SpringMVC和MyBatis技术&#xff0c;实现高效、稳…

springboot_ssm837高校学生健康档案管理系统--论文

目录 具体实现截图摘要 系统所用技术介绍写作提纲源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01; 具体实现截图 摘要 随着高校学生规模的不断扩大&#xff0c;健康档案管理已成为高校管理工作中的重要环节。传统纸质档案管理方式存在…

没有数据标注,AI测试怎么跑?2026年的新解决方案

无标注数据时代的AI测试挑战 在AI驱动的软件测试领域&#xff0c;标注数据匮乏是长期痛点——如同警察缺乏罪犯画像&#xff0c;无法精准识别缺陷。2026年&#xff0c;随着大模型和自动化工具演进&#xff0c;传统依赖标注的测试方法已显不足。本文针对软件测试从业者&#xf…

springboot_ssm844农产品商城 农场供销一体系统SSM

目录 具体实现截图系统概述核心功能技术架构创新点应用价值 系统所用技术介绍写作提纲源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01; 具体实现截图 系统概述 SpringBoot_SSM844农产品商城是一个基于SpringBootSSM&#xff08;Spring…

基于微信小程序的实验室排课系统【源码+文档+调试】

&#x1f525;&#x1f525;作者&#xff1a; 米罗老师 &#x1f525;&#x1f525;个人简介&#xff1a;混迹java圈十余年&#xff0c;精通Java、小程序、数据库等。 &#x1f525;&#x1f525;各类成品Java毕设 。javaweb&#xff0c;ssm&#xff0c;springboot等项目&#…

GPEN人像修复实战:一张模糊照如何重生

GPEN人像修复实战&#xff1a;一张模糊照如何重生 你有没有见过那种老照片&#xff1f;泛黄、模糊、布满噪点&#xff0c;人脸几乎看不清轮廓。可就在这样的图像上&#xff0c;AI 正在做一件近乎“逆天改命”的事——把一张几十年前的模糊人像&#xff0c;还原成高清清晰的模样…

Java毕设选题推荐:基于springboot的医药配药管理系统【附源码、mysql、文档、调试+代码讲解+全bao等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

springboot_ssm845股票基金分析系统的设计与实现ssm

目录 具体实现截图摘要内容 系统所用技术介绍写作提纲源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01; 具体实现截图 摘要内容 基于SpringBoot和SSM框架的股票基金分析系统旨在为投资者提供高效、便捷的数据分析与决策支持工具。系统整…

springboot_ssm838学生过程性作业评价系统ssm

目录具体实现截图系统概述技术架构核心功能应用价值系统所用技术介绍写作提纲源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;具体实现截图 系统概述 SpringBoot_SSM838学生过程性作业评价系统基于SpringBootSSM&#xff08;SpringSpr…