开发者社区> 灰小猿> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

高效解答二进制数“多异或”和“多同或”连续运算问题

简介: 高效解答二进制数“多异或”和“多同或”连续运算问题
+关注继续查看

 

“异或”的数学运算符表示为“⊕”,“同或”的数学运算符表示为“⊙”,在计算机网络中“1”表示“真”,“0”表示“假”

目录

异或运算

多异或连续运算

同或运算

多同或连续运算


Hello!你好哇,我是灰小猿!

在学习计算机网络的时候,有用到对二进制数进行异或(符号:⊕)和同或(符号:⊙)运算,所以在这里简单记录一下。

在数学中异或和同或常用于命题的判断,而在计算机中则常用于二进制数之间的运算,

异或运算

关于异或运算有以下的规定:

0⊕0=0 0同0异或,结果为0

0⊕1=1 0同1异或,结果为1

1⊕0=1 1同0异或,结果为1

1⊕1=0 1同1异或,结果为0

即两个逻辑变量相异,输出才为1

也可以用两句话表示:“异为1,同为0

多异或连续运算

而在计算机网络中真正对其进行使用的时候,两个二进制数之间的简单异或运算并不多见,更多的则是多异或连续运算。

首先看几个多异或连续运算的式子:

1⊕0⊕1⊕1⊕1=0

1⊕0⊕1⊕0⊕1=1

0⊕0⊕1⊕0=1

0⊕1⊕1⊕0=0

关于这种多异或连续运算,通常的思路是:

多个异或连续运算,就类似数学上的连加、连乘运算:将前两个数的运算结果,与第三个数继续运算;再将结果与第四个运算;直到最后得出结果,其中的每一步都要按照相应运算的规则进行;

但是也还有另外一种比较简单的判断方法:

多个命题(或命题变量)的“异或”运算:其结果依赖于参与运算的所有量中,取值为“真(1)”的量的“个数”的“奇偶性”:

  若含“奇数”个“真命题(1)”,则结果为“真(1)”;

  若含“偶数”个“真命题(1)”,则结果为“假(0)”;(注:零个也是偶数个)

所以这样看来,上面的式子中:

第一个有偶数个“1”则结果为“0”,

第二个有奇数个“1”则结果为“1”,

换句话说:命题表达式 A⊕B⊕C⊕D 结果为“真”,当且仅当 A、B、C、D 中有奇数个(即 1 个或 3 个)变量的取值为“真”;

而至于其中“假命题”的个数,则对结果“无任何影响”。关于这一点的证明,可以从下面两个恒等式中找到思路:

p ⊕ 1 = 非p;——增加一个“真命题”参与运算,总会将“原命题”变成其“反命题”;

p ⊕ 0 = p;——增加一个“假命题”参与运算,对“原命题”永远没影响;

同或运算

关于同或运算有以下几点要注意:

1.“同或”是一个数学运算符,应用于逻辑运算。 其运算法则为a同或b=ab+a‘b’(a'为非a)。

真“同或”假的结果是假,假“同或”真的结果也是假,真“同或”真的结果是真,假“同或”假的结果是真。

换句话说就是:两个值相同,则同或结果为真。反之,为假。——简称同真,异假。即,同或:相同为一,不同为零。

2. 同或符号为⊙。(圆圈内为点)

3. 同或和异或互为非运算。

4. 同或公式:

a⊙b=ab+a'b'(a'为非a,b'为非b);

5. 同或真值表

a

b

a⊙b

0

0

1

1

1

1

0

1

0

1

0

0

6.同或运算只有交换律和结合律

a ⊙ b = b ⊙ a; (a ⊙ b) ⊙ c = a ⊙ (b ⊙ c);

 

多同或连续运算

对于多个输入的同或可以这样理解:

a ⊙ 1 = a; a⊙ 0⊙ 0 = a;

即a与任意个1或偶数个0的同或,结果是a本身

例如:

1⊙ 1⊙ 0⊙ 1⊙ 0⊙ 0的运算方法为:

1)根据交换律,可以把输入中的 1 全部向右靠在一起得

0⊙ 0⊙ 0⊙ 1 ⊙1⊙ 1,然后根据结合律

0⊙ 0⊙ 0⊙ (1⊙1⊙ 1),消去所有 1,得

0⊙ 0⊙ 0

2)消去偶数个 0,得结果为:0

如果步骤 1)将得到偶数个 0 则少消除一个 1 作为结果

简而言之,同或运算就是观察输入中 0 的个数。奇数个 0 则结果为 0 ,偶数个 0 则结果为 1

觉得有用记得点赞关注哟!

大灰狼陪你一起进步!

imageimage.gif编辑

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
不切换 Git 分支,却能同时在多个分支上工作,我是怎么做到的?
不切换 Git 分支,却能同时在多个分支上工作,我是怎么做到的?
30 0
二进制运算
基础很重要,与市面上大部分只讲结果的文章(粘贴复制)不同。作者将会亲自带你领会二进制运算的魅力
62 0
GANs正在多个层面有所突破
作者:inFERENce 翻译:余志文 去年我一直在研究如何更好地调整GANs中的不足,但因为之前的研究方向只关注了损失函数,完全忽略了如何寻找极小值问题。直到我看到了这篇论文才有所改变: 详解论文: The Numerics of GANs 我参考了Mar的三层分析,并在计算层面上仔细考虑了这个问题:我们这样做的最终目标是什么?我相信GANs在这个层面已经有所突破了,因为他们试图优化错误的东西或寻求不存在的平衡等。
1408 0
Gitlab的使用(内含Git命令大全)
gitlab使用流程 标签(空格分隔): gitlab 1、前言 使用svn的同学抓(dan)狂(sui)的问题? 没有网时候想commit怎么办?svn服务器宕机一天,技术团队抓狂,抱怨运维不给力 非核心成员想贡献自己的力量却无论为力 每每想看一下svn上的配置文件或者代码,不能在线看,必须下载。
2005 0
[认证授权] 1.OAuth2授权
1 OAuth2解决什么问题的? 举个栗子先。小明在QQ空间积攒了多年的照片,想挑选一些照片来打印出来。然后小明在找到一家提供在线打印并且包邮的网站(我们叫它PP吧(Print Photo缩写 ))。
1215 0
通过反射克隆对象,对象复制(克隆)工具类
       最近做的项目中,经常会遇到用视图来操作数据库的,但是页面需要的则是某个实体对象,在controller层查出list 还要把将view对象转化成entity对象。
959 0
实现2个超大数的加法运算
一道笔试题~实现2个超大数据的加法运算,这2个超大数,意思就是long也装不下的数,就顶大概100位吧。 这道题其实看上去很简单,但是实际上涉及到的知识点还是很多的,非常考验一个人的程序设计能力和对API的熟悉程度。
543 0
第二代支付系统专题之报文篇(二)大额支付报文完整版(含二代新增功能业务说明)
  最近在负责某商业银行第二代支付系统项目,经过对第二代支付系统报文交换标准(1.4版)研究,发现与一代支付系统相比,新增了不少新的交易。现整理如下: 
752 0
+关注
灰小猿
一个用代码编织世界的工程师
70
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载