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

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

 

“异或”的数学运算符表示为“⊕”,“同或”的数学运算符表示为“⊙”,在计算机网络中“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

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

大灰狼陪你一起进步!

image.gif编辑

目录
相关文章
|
6天前
|
算法
【算法】位运算算法——两整数之和
【算法】位运算算法——两整数之和
|
3月前
|
机器学习/深度学习 存储 算法
位运算是一种什么运算方式
位运算是一种什么运算方式
29 1
|
8月前
|
存储 C#
C# 逻辑位运符及运算原理 按位操作二进制
C# 逻辑位运符及运算原理 按位操作二进制
|
3月前
|
存储 算法
【三种方法】求一个整数存储在内存中二进制中的1的个数附两道课外练习题
【三种方法】求一个整数存储在内存中二进制中的1的个数附两道课外练习题
31 0
|
10月前
|
存储 算法 数据处理
数据的表示及运算
一、数据的表示及运算 数据的表示和运算是计算机系统中非常重要的概念,它们决定了计算机如何处理和操作数据。 1. 数据的表示:计算机使用二进制(0和1)来表示和存储数据。二进制是一种只有两个状态的编码方式,可以通过开关电路的开和关来表示0和1。计算机将二进制编码与不同的数据类型关联,例如整数、浮点数、字符等。 2. 整数运算:计算机可以对整数进行基本的算术运算,包括加法、减法、乘法和除法。这些运算是通过电子电路中的逻辑门实现的,逻辑门可以对二进制数进行逻辑运算和移位操作。 3. 浮点数运算:计算机可以进行浮点数的运算,浮点数是一种用于表示带有小数部分的数值的数据类型。浮点数运算涉及到浮点数的表示
65 0
|
人工智能 算法 C++
【基础算法】关于高精度计算的问题【很高位数数据的加减乘除(相关代码用C++实现)】
【基础算法】关于高精度计算的问题【很高位数数据的加减乘除(相关代码用C++实现)】
|
存储
5.3.1_原补码的乘法运算
计算机组成原理之原补码的乘法运算
309 2
5.3.1_原补码的乘法运算
【每日一题Day41】生成交替二进制字符串的最小操作数 | 模拟 位运算
思路:长度一定的交替二进制字符串有两种可能性,以字符0开头的0101字符串和以字符1开头的1010字符串,因此只需要将字符串s与这两种字符串进行比较,记录不相同的字符个数,最后返回较小值即可
81 0
【每日一题Day41】生成交替二进制字符串的最小操作数 | 模拟 位运算
求实数的整数次幂(循环版)(高效)(位运算解题)
说明:参数 x 为底数,n 为指数。若参数正确,则函数值为 x 的 n 次幂。若参数不正确(当底数为 0 且指数为 0 或负数时无意义),则报告错误,函数值为0。// 这个位运算是大部分都不熟悉也不敢用的东西,但是确实是编程里面的一个非常重要的工具。请编写函数,用循环语句以最快的方法求任意实数的任意整数次幂。要求:不得调用 pow 函数,不得使用递归方法。指数 二进制 公式。
164 0
求实数的整数次幂(循环版)(高效)(位运算解题)
位运算:二进制中1的个数
题目: 输入一个 32 位整数,输出该数二进制表示中 1 的个数 注意: 负数在计算机中用其绝对值的补码来表示。 数据范围: −100≤ 输入整数 ≤100 样例1: 输入:9 输出:2 解释:9的二进制表示是1001,一共有2个1。 样例2: 输入:-2 输出:31 解释:-2在计算机里会被表示成11111111111111111111111111111110, 一共有31个1。
82 0