1 异或的定义

  • 异或(xor)是一个数学运算符。
  • 它应用于逻辑运算。
  • 异或的数学符号为“⊕”,计算机符号为“xor”,也可以写成 ^ (注意区别于乘方符号^)
  • 其运算法则为:
  • 如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。
  • 异或是基于二进制的
  • 异或是基于二进制的,逐位的比较!
  • 异或可以理解为不进位的二进制加法

2 为什么 0异或任何数=自身, 而1异或任何数=非自身

0异或任何数=自身, 1异或任何数=非自身

下面是我的推导过程,网上的往往说的不太清楚

A只可能是0 或者1

A ^ 1 的推导

如果A=0, 那么A^1=1, 所以A^1的结果和A相反

如果A=1,那么A^1=0, 所以A^1的结果和A相反

所以无论A=0/1, A^1都是非A

所以A ^1=非A

A ^0的推导

如果

如果A=0, 那么 A^0=0 , 所以A^0的结果和A相同

如果A=1, 那么 A^0=1 , 所以A^0的结果和A相同

所以A ^0=A

3  为什么有了不等于,还要异或?这两者相同吗?

  • 异或  不同于 不等于
  • 区别在于异或是接位进行的,不等是按整体进行的
  • 异或属于位运算,把一个数以二进制的形式对每一位进行异或运算

4  xor 不同于 or

  • or(t,t)=t
  • xor(t,t)=0

参考资料,需要整理,先这样

异或(xor)是一个数学运算符。它应用于逻辑运算。异或的数学符号为“⊕”,计算机符号为“xor”。其运算法则为:

a⊕b = (¬a ∧ b) ∨ (a ∧¬b)

如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。

异或也叫半加运算,其运算法则相当于不带进位的二进制加法:二进制下用1表示真,0表示假,则异或的运算法则为:0⊕0=0,1⊕0=1,0⊕1=1,1⊕1=0(同为0,异为1),这些法则与加法是相同的,只是不带进位,所以异或常被认作不进位加法。

异或略称为XOR、EX-OR

程序中有两种演算子:XOR、⊕。

使用方法如下

z = x ⊕ y

z = x xor y

英文术语 exclusive or 怎么理解呢?“异或”最早是因为什么发明的?

对于a⊕b⊕a=b,我觉得“0异或任何数不变,1异或任何数取反”比较好理解。有没有别的理解方式,感觉好神奇。能独立发现a⊕b⊕a=b交换 a、b 值的人,能不能告诉我你们是怎么思考的。。

表示为:

0 ^ 0 = 0
1 ^ 0 = 1
0 ^ 1 = 1
1 ^ 1 = 0
特点:

0异或任何数,是任何数;
1异或任何数,任何数取反;
任何一个数字异或自己都等于0
面试题:一个整型数组中除了两个数字之外,其他的数字都出现了两次。试找出这两个只出现一次的数字。《剑指offer》

异或的意思是 按位比较,位相同(0,0或1,1)时,结果为0,位不同时(0,1或1,0)结果为1
所以,0异或任何数A 结果还是A
A异或1时,A的最后一位是1,则会变为0,如果是0,则会变为1,因此,结果一定是非A

异或本质就是无进位相加,比如下表

第一个数 1 1 0 0
第二个数 0 1 0 1
结果 1 0 0 1
  • 第一个数为1,第二数为0时,结果为1+0=1;
  • 第一个数为1,第二数为1时,结果为1+1=2,逢2不进1直接为0;
  • 第一个数为0,第二数为0时,结果为0+0=0;
  • 第一个数为0,第二数为1时,结果为0+1=1;

结论:多个数的异或就看1的个数是奇数还是偶数,如果为奇数则最终结果为1,如果为偶数则最终结果为0

异或性质:满足交换律和结合律 即:a^b=b^a (a^b)^c=a^(b^c)

异或应用

案例1:不使用中间变量来交换两个数的位置

int a=100,b=200;
a=a^b;
b=a^b;
a=a^b;

这段代码怎么理解呢? 把a看作甲,把b看作乙

  • 第一行的a=a^b;该行代码执行完之后,a变成甲^乙 , b还是乙。
  • 第二行代码b=a^b;该行代码执行完之后,b=甲^乙^乙,因为乙^乙的结果为0,所以b=甲=a。
  • 第三行代码a=a^b;该行代码执行完之后,a=甲^乙^甲,因为甲^甲的结果为0,所以a=乙=b。

异或相关知识 xor (草稿)相关推荐

  1. POJ 2788 ipnetworks 计算机网络相关知识

    今天刚好考完计算机网络,刚好复习下IP和子网掩码的相关知识. 子网掩码: 子网掩码是子网划分的依据,它跟IP地址一样,长度也是32位,点分十进制表示,每部分0~255,但是跟IP地址不同的是,子网掩码 ...

  2. 狂补呼叫中心相关知识,将收集的资料贴于此

    狂补呼叫中心相关知识,将收集的资料贴于此: H.323的协议体系 根据1998年H.323第二版,H.323制定了无QoS(服务质量)保证的分组网络 PBN(packet Based Networks ...

  3. 卷积神经网络(CNN)相关知识以及数学推导

    神经网络概述 神经元模型 以上就是经典的"M-P神经元模型".在这个模型中,神经元接收来自n个其他神经元传递过来的输入信号,这些输入信号通过带权重的连接进行传递,神经元接收到的总输 ...

  4. 分式型函数的相关知识

    一.常见列举 [代数部分] ①分子分母都是一次型,如\(f(x)=\cfrac{x+2}{x+1}\): 特别注意:\(f(x)=\cfrac{1-x}{1+x}\),对称中心为\((-1,-1)\) ...

  5. JS作用域相关知识(#精)

    在学习<你不知道的JS>一书中,特将作用域相关知识在此分享一下: #说到作用域,就不得不提到LHS查询和RHS查询: 1)如果查询目的是对变量进行赋值,则使用LHS查询 2)如果查询目的是 ...

  6. 工业相机参数之帧率相关知识详解

    点击上方"小白学视觉",选择加"星标"或"置顶"重磅干货,第一时间送达 工业相机是机器视觉系统的重要组成部分之一,在机器视觉系统中有着非常重 ...

  7. shell的相关知识(变量、脚本定义)

    一.shell的相关知识: 1.对于shell编程语言大体分为:机器语言.汇编语言.高级语言 2.shell变量类型:事先确定数据的存储格式和长度 shell变量分为:字符型.数值型 数值型又分为:整 ...

  8. 视频压缩算法的相关知识

    视频压缩算法的相关知识 MPEG-1 MPEG 视频压缩编码后包括三种元素:I帧(I-frames).P帧(P-frames)和B帧(B-frames).在MPEG编码的过程中,部分视频帧序列压缩成为 ...

  9. linux 格式化 dvd,linux 服务器分区格式化相关知识 -mount

    关于linux 系统mount和mkfs 的相关知识: 使用mount 1)Mount的相关格式:mount [-t 文件类型][-o  选项] devicedir 详解: -t 文件类型,通常默认m ...

最新文章

  1. 详解Spring中Bean的自动装配~
  2. Android JNI入门第一篇——HelloJni
  3. 几个重要的java数据库访问类和接口
  4. 以效率为根本,网易慢跑要做“另类”的TO B业务
  5. OAuth2.0学习(1-9)新浪开放平台微博认证-web应用授权(授权码方式)
  6. java session 数量_java中使用session监听实现同帐号登录限制、登录人数限制
  7. ios PNG Crush error (PNG图片错误)
  8. wampserver php乱码,WampServer搭建php环境可能遇到的问题
  9. Android虚拟化技术
  10. 离线处理需要做哪些工作_游戏配音需要做哪些工作?
  11. js this指向分析
  12. SQLi LABS Less-3 联合注入+报错注入
  13. 哪款浏览器好用_超级实用!让你效率倍增的6款浏览器插件
  14. 机器学习-决策树(XGBoost、LightGBM)
  15. 168个怪兽之声进化游戏生物怪兽音效素材 Evolved Game Creatures – Monster Sounds
  16. iQOO Neo6 SE什么时候发布 iQOO Neo6 SE配置如何
  17. matlab uicontrol 下标,Matlab Impoint和Uicontrol
  18. Day532533.Python基础 -python
  19. 什么是配置管理?配置管理由专人负责吗?
  20. SQL 横转竖 、竖专横(转载) 列转行 行转列 表旋转

热门文章

  1. emc做oracle备份,Oracle备份和EMC存储到底谁说的对?
  2. 全微分/偏导数/方向导数/梯度/全导数
  3. Spring---浅谈IOC
  4. 家用电器用户行为分析与事件识别
  5. 1024程序员节 - 分享一个抖音视频下载程序
  6. 魔改 Typora 主题
  7. 操作系统学习-练习题个人总结(一)
  8. python 将 .pdf 文件转为 .md
  9. 【日本IT】2018日本开发语言收入排名大公开 | 快来看看你的Java、.Net上榜了吗?
  10. java dib文件 加位图文件头_DIB类头文件和DIB类的实现DIB.CPP