异或运算的原理以及应用

        异或(XOR)是计算机科学和数字电路中常用的运算之一。异或运算符通常用符号“⊕”或“^”表示,它有着简单而独特的性质,使其在数据加密、错误检测与纠正等多个领域得到了广泛的应用。在网络上我们传输的每一比特数据都经过了异或运算。

1. 异或运算的“原料”

        异或属于逻辑运算,输入只能是逻辑真或者逻辑假,数值是不能直接输入到异或运算中的,原因是我们不能唯一定义数值100为假数值200为真,将数值(整数)转换成二进制后,通常是二进制形式的比特位。

2. 异或运算

        计算异或运算的结果极其的简单,有一个简单的计算规律-“相同为0,不同为1”,即:两个相同的数异或结果为0,两个不同的输入数异或结果为1,运算真值表如下:

A

B

A⊕B

0

0

0

0

1

1

1

0

1

1

1

0

        异或运算在数学上可以等价为不带进位的二进制加法运算,以及不带借位的减法运算。当解决了进位问题,异或就可以实现加减法的数值运算,如 :如何将算数运算转换成逻辑运算_所有计算都可以转化为逻辑运算来实现-CSDN博客文章浏览阅读1k次,点赞31次,收藏16次。逻辑运算是一切数学的基础也是计算机的基础,无论是数学里面的高等数据还是概率论,都是基于集合论进行搭建,集合论最基本的操作就是逻辑运算。什么是逻辑运算呢?在逻辑运算中,仅有“与”、“或”、“非”三种基本运算,在算数运算中,由“加”、“减”、“乘”、“除”四种基本运算组成。逻辑运算的输入只能是“真”或“假”,输出也只能是“真”或“假”;算数运算的输入可以是所有的实数,输出也可以是所有的实数。逻辑运算和算法运算从直观上感觉是完全不同,他们有不同的输入和不同的输出,但是满足了某些情况可以将算数运算转_所有计算都可以转化为逻辑运算来实现https://blog.csdn.net/bitslink/article/details/138833749

        异或运算们可以由基础的逻辑运算"与"、“或”和“非”组成,如下:

F=A\overline{B}+\overline{A}B=A\oplus{B}

        真值表如下:

A

B

A⊕B

A\overline{B}+\overline{A}B

0

0

0

0

0

1

1

1

1

0

1

1

1

1

0

0

3. 运算性质

  • 归零性:x\oplus{x}=0;相同的数异或结果为零,利用该可以检测两个数是否相等。
  • 互异性:x\oplus{y}\neq0,x{\neq}y;不同数异或结果不为零,利用该特性区分不同的数
  • 结合律:(x\oplus{y})\oplus{z}=x\oplus(y\oplus{z});异或运算满足结合律,即分组不影响结果
  • 交换律:x\oplus{y}=y\oplus{x};异或满足交换律,运算顺序不影响结果。
  • 对称性:(x\oplus{y})\oplus{y}=x\oplus(y\oplus y)=x;一个数与另一个数异或,再与这个数异或,结果是最初的数,这是异或用于加密解密的基础。
  • 与0的关系:x\oplus 0=x,任何数与0异或等于其本身
  • 与1的关系:x\oplus 1=\bar{x},任何数与1异或等于其本身取反

4. 异或应用

4.1. 值交换

        在需要进行值交换场景下,一般都是定义个中间变量来完成值交换,当使用异或运算后无需值交换就可以完成值交换,如下:

a=a\oplus b\oplus a=b\\ b=a\oplus b\oplus b=a

        C语言实现源码如下:

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

4.2. 加解密

        得益于异或运算的可逆性以及运算简单,异或运算常用于简单的对称加密算法中。一个明文通过与密钥进行异或运算可以得到密文,同样地,密文通过与相同的密钥进行异或运算可以还原为明文。这种方法在流密码和一些块密码算法中得到了应用。

        加密过程(x为原始数据,k为密钥,z为密文):

x\oplus k=z

        解密过程

z\oplus k=x\oplus k\oplus k\\ z\oplus k=x\oplus (k\oplus k)\\ z\oplus k=x\oplus (0)\\ z\oplus k=x

        使用固定密钥异或加密,其加密等级较低比较容易被破解,对于x⊕k=z,仅需要知道一对x与z的对应关系就推算出密钥k:

z\oplus x=x\oplus k\oplus x\\ z\oplus x=(x\oplus x)\oplus k\\ z\oplus x=0\oplus k\\ z\oplus x=k

        通常为了增加异或的加密等级需使用动态密钥。

4.3. 数据校验

        异或运算在数据校验中的应用主要体现在CRC(循环冗余校验)算法中。CRC是一种通过多项式除法实现的错误检测码,常用于通信和存储设备中,用来验证数据在传输过程中是否发生了损坏或改变。CRC算法的核心是通过一个预定的生成多项式对数据块进行处理,生成一个校验序列(Checksum)。接收端在收到数据后,通过相同的生成多项式对数据进行再次处理,并与接收到的校验序列进行比较,从而判断数据在传输过程中是否存在错误。
 

4.4. 数据备份

        借助于异或运算的对称特性,在数据备份和存储中,异或运算通常用于实现数据冗余和容错机制,主要涉及到RAID(冗余磁盘阵列)技术中的一些实现方式,特别是RAID级别为RAID-5的情况。

        生成校验:对于每个数据条带,RAID-5使用异或运算计算一个奇偶校验块。假设有三个数据块 D1,D2,D3, 则奇偶校验块 P 的计算方式为P=D1\oplus D2\oplus D3 

        容错恢复:如果一个硬盘损坏,RAID-5能够使用剩余的数据块和奇偶校验块来计算出缺失的数据块。例如,如果失去了 D2 数据块,可以使用校验块P以及D1和D3进行恢复:D2=D1\oplus D3\oplus P这种方式下,异或运算使得RAID-5在数据损坏时能够高效地进行数据恢复,同时减少了对冗余空间的需求。

4.5. 生成伪随机数

        一些伪随机数生成算法会使用异或运算来打乱种子。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何用 ChatGPT DALL-E3绘画(10个案例)

如何用ChatGPT绘画——10个案例(附提示词) DALL•E 3可以在ChatGPT plus里直接使用了。 如果想免费使用,可以用新必应免费使用。 上次有个朋友问:DALL•E 3 有什么用。 这里用十个案例,来解释一下这个问题。 1.创…

计算机缺失msvcr110.dll如何解决,这6种解决方法可有效解决

电脑已经成为我们生活和工作中不可或缺的工具,然而在使用电脑的过程中,我们常常会遇到一些问题,其中之一就是电脑找不到msvcr110.dll文件。这个问题可能会给我们带来一些困扰,但是只要我们了解其原因并采取相应的解决方法&#xf…

CSS 实现电影信息卡片

CSS 实现电影信息卡片 效果展示 CSS 知识点 CSS 综合知识运用 页面整体布局 <div class"card"><div class"poster"><img src"./poster.jpg" /></div><div class"details"><img src"./avtar…

【Liunx】基础开发工具的使用介绍-- yum / vim / gcc / gdb / make

前言 本章将介绍Linux环境基础开发工具的安装及使用&#xff0c;在Linux下安装软件&#xff0c;编写代码&#xff0c;调试代码等操作。 目录 1. yum 工具的使用1.1 什么是软件包&#xff1a;1.2 如何下载软件&#xff1a;1.3 配置国内yum源&#xff1a; 2. vim编辑器2.1 vim的安…

创建comfyui自定义节点

参考 https://github.com/liubai-liubai/ComfyUI-ImgSeg-LB/tree/main https://blog.styxhelix.life/?p33 安装 不需要安装任何其他依赖文件&#xff0c;只需要把0x_erthor_node文件夹复制到custom_nodes文件夹下&#xff0c;就能安装成功。 a1&#xff1a;展示了代码结构&…

数字化转型,不做是等死,做了是找死

“ 有不少人调侃说&#xff1a;数字化转型&#xff0c;不做是等死&#xff0c;做了是找死。如果你是一个老板&#xff0c;你会怎么选择呢&#xff0c;下面我来剖析一下。” 我按照“做正确的事&#xff0c;正确的做事”来分析数字化转型&#xff0c;再通过抓痛点和流程再造两项…

guli商城业务逻辑-基础篇笔记

这里写目录标题 0.1 viscode设置用户代码片段1.实现多级菜单接口1.1 对接前端菜单1.2 对接网关接口解决跨域问题&#xff0c;如果不解决跨域&#xff0c;浏览器还是访问不了api1.3 把商品服务添加网关1.4 修改前端显示分类菜单1.5 给菜单添加删除修改功能1.5.1 删除功能的后端业…

【猫狗分类】Pytorch VGG16 实现猫狗分类5-预测新图片

背景 好了&#xff0c;现在开尝试预测新的图片&#xff0c;并且让vgg16模型判断是狗还是猫吧。 声明&#xff1a;整个数据和代码来自于b站&#xff0c;链接&#xff1a;使用pytorch框架手把手教你利用VGG16网络编写猫狗分类程序_哔哩哔哩_bilibili 预测 1、导包 from to…

分数布朗运动FBM期权定价模型

BS定价模型和蒙特卡洛模拟期权定价方法都 假设标的资产价格的对数服从布朗运动 &#xff0e; 但是实际 的金融市场中标的资产价格运动过程具有 “尖峰厚尾 ” 现象 &#xff0c; 运用分数布朗运动 &#xff08;FBM &#xff09;来刻画标的资产 价格的运动过程可能更加合适。 …

HP惠普暗影精灵10 OMEN Gaming Laptop 16-wf1xxx原厂Win11系统镜像下载

惠普hp暗影精灵10笔记本电脑16-wf1000TX原装出厂Windows11&#xff0c;恢复开箱状态oem预装系统安装包&#xff0c;带恢复重置还原 适用型号:16-wf1xxx 16-wf1000TX,16-wf1023TX,16-wf1024TX,16-wf1025TX, 16-wf1026TX,16-wf1027TX,16-wf1028TX,16-wf1029TX, 16-wf1030TX,16-…

docker拉取镜像太慢解决方案

前言 这是我在这个网站整理的笔记,有错误的地方请指出&#xff0c;关注我&#xff0c;接下来还会持续更新。 作者&#xff1a;神的孩子都在歌唱 创建daemon.json文件,输入以下信息 vim /etc/docker/daemon.json{"registry-mirrors": ["https://9cpn8tt6.mirror…

JAVA开发 选择多个文件,系统运行后自动生成ZIP压缩包

选择多个文件&#xff0c;系统运行后自动生成ZIP压缩包 实现方法1.1 代码块1.2 运行结果截取 相关知识 实现方法 案例简述&#xff1a;通过启动java代码来打开文件选择器对话框&#xff0c;用户选择确认需要进行压缩的文件&#xff0c;可一次性选择多个文件&#xff0c;选择完…

边缘计算采集网关解决方案:为企业提供高效、灵活的数据处理方案-天拓四方

一、企业背景 某大型制造企业&#xff0c;位于国内某经济发达的工业园区内&#xff0c;拥有多个生产线和智能化设备&#xff0c;致力于提高生产效率、降低运营成本。随着企业规模的扩大和生产自动化的推进&#xff0c;该企业面临着海量数据处理、实时响应和网络安全等多重挑战…

安卓在Fragment控制状态栏显示隐藏

废话不多上效果 隐藏 显示 核心代码 首先是Framgrent package com.zx.tab;import android.content.Context; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button;impor…

Django中间件探索:揭秘中间件在Web应用中的守护角色与实战应用

系列文章目录 Django入门全攻略&#xff1a;从零搭建你的第一个Web项目Django ORM入门指南&#xff1a;从概念到实践&#xff0c;掌握模型创建、迁移与视图操作Django ORM实战&#xff1a;模型字段与元选项配置&#xff0c;以及链式过滤与QF查询详解Django ORM深度游&#xff…

Cisco Packet Tracer实验(四)

生成树协议&#xff08;Spanning Tree Protocol&#xff09; 交换机在目的地址未知或接收到广播帧时是要进行广播的。如果交换机之间存在回路/环路&#xff0c;那么就会产生广播循环风暴&#xff0c;从而严重影响网络性能。 而交换机中运行的STP协议能避免交换机之间发生广播…

登录MySQL方式

登录MySQL方式 方式一&#xff1a;通过MySQL自带的客户端 MySQL 客户端输入命令即可 方式二&#xff1a;通过window自带的客户端 从命令端&#xff08;cmd&#xff09;进入 mysql -h localhost -P 3306 -u root -p Enter password:密码登录方式&#xff1a; mysql -h 主…

【Java03】Java中数组在内存中的机制

1. 内存中的数组 Java中的数组是一种引用类型&#xff0c;数组变量&#xff08;引用&#xff09;和数组元素在内存中是分开的。 Java中的数组变量其实就是指针。 如果想要访问数组元素&#xff0c;只能通过这个数组的引用变量&#xff08;指针&#xff09;来访问。 实际数组对…

上海计算机考研避雷,25考研慎报

上大计算机一直很热 408考研er重来没有让我失望过&#xff0c;现在上大的专业课是11408&#xff0c;按理说&#xff0c;这个专业课的难度是很高的&#xff0c;但是408er给卷出了新高度&#xff0c;大家可以去上大官网看看今年最新的数据&#xff0c;我也帮大家统计了24年最新的…

【YOLOv10轻量级涨点改进:block优化 | 华为诺亚2023极简的神经网络模型 VanillaNet】

本文属于原创独家改进:一种极简的神经网络模型VanillaNet,以极简主义的设计为理念,网络中仅仅包含最简单的卷积计算,去掉了残差和注意力模块 计算量参数量比较,8.4 GFLOPs降低至6.1 GFLOPs YOLOv10n summary: 385 layers, 2709380 parameters, 2709364 gradients, 8.4 GF…