当前位置:首页 > 上门服务 >

怎么用真值表证明异或运算(异或公式推导)

来源:原点资讯(www.yd166.com)时间:2024-01-02 11:38:13作者:YD166手机阅读>>

大家比较熟悉的逻辑运算,主要是“与运算”(AND)和“或运算”(OR),还有一种“异或运算”(XOR),也非常重要。

本文介绍异或运算的含义和应用。

怎么用真值表证明异或运算,异或公式推导(1)

一、含义

XOR 是 exclusive OR 的缩写。英语的 exclusive 意思是“专有的,独有的”,可以理解为 XOR 是更单纯的 OR 运算。

我们知道,OR 运算的运算子有两种情况,计算结果为true

(1)一个为 true,另一个为 false;

(2)两个都为 true。

上面两种情况,有时候需要明确区分,所以引入了 XOR。

XOR 排除了第二种情况,只有第一种情况(一个运算子为true,另一个为false)才会返回 true,所以可以看成是更单纯的 OR 运算。也就是说,XOR 主要用来判断两个值是否不同。

XOR 一般使用插入符号(caret)^表示。如果约定0为 false,1为 true,那么 XOR 的运算真值表如下。

0 ^ 0 = 00 ^ 1 = 11 ^ 0 = 11 ^ 1 = 0二、运算定律

XOR 运算有以下的运算定律。由于非常简单,这里就省略证明了。

(1)一个值与自身的运算,总是为 false。

x ^ x = 0

(2)一个值与 0 的运算,总是等于其本身。

x ^ 0 = x

(3)可交换性

x ^ y = y ^ x

(4)结合性

x ^ (y ^ z) = (x ^ y) ^ z三、应用

根据上面的这些运算定律,可以得到异或运算的很多重要应用。

3.1 简化计算

多个值的异或运算,可以根据运算定律进行简化。

a ^ b ^ c ^ a ^ b= a ^ a ^ b ^ b ^ c= 0 ^ 0 ^ c= c

3.2 交换值

两个变量连续进行三次异或运算,可以互相交换值。

假设两个变量是xy,各自的值是ab。下面就是xy进行三次异或运算,注释部分是每次运算后两个变量的值。

x = x ^ y // (a ^ b, b)y = x ^ y

// (a ^ b, a ^ b ^ b) => (a ^ b, a)
x = x ^ y // (a ^ b ^ a, a) => (b, a)

这是两个变量交换值的最快方法,不需要任何额外的空间。

3.3 加密

异或运算可以用于加密。

第一步,明文(text)与密钥(key)进行异或运算,可以得到密文(cipherText)。

text ^ key = cipherText

第二步,密文与密钥再次进行异或运算,就可以还原成明文。

cipherText ^ key = text

原理很简单,如果明文是 x,密钥是 y,那么 x 连续与 y 进行两次异或运算,得到自身。

(x ^ y) ^ y= x ^ (y ^ y)= x ^ 0= x

3.4 数据备份

异或运算可以用于数据备份。

文件 x 和文件 y 进行异或运算,产生一个备份文件 z。

x ^ y = z

以后,无论是文件 x 或文件 y 损坏,只要不是两个原始文件同时损坏,就能根据另一个文件和备份文件,进行还原。

x ^ z= x ^ (x ^ y) = (x ^ x) ^ y= 0 ^ y= y

上面的例子是 y 损坏,x 和 z 进行异或运算,就能得到 y。

四、一道面试题

一些面试的算法题,也能使用异或运算快速求解。

请看下面这道题。

一个数组包含 n-1 个成员,这些成员是 1 到 n 之间的整数,且没有重复,请找出缺少的那个数字。

最快的解答方法,就是把所有数组成员(A[0] 一直到 A[n-2])与 1 到 n 的整数全部放在一起,进行异或运算。

A[0] ^ A[1] ^ ... ^ A[n-2] ^ 1 ^ 2 ^ ... ^ n

上面这个式子中,每个数组成员都会出现两次,相同的值进行异或运算就会得到 0。只有缺少的那个数字出现一次,所以最后得到的就是这个值。

你可能想到了,加法也可以解这道题。

1 2 ... n - A[0] - A[1] - ... - A[n-2]

但是,加法的速度没有异或运算快,而且需要额外的空间。如果数字比较大,还有溢出的可能。

下面是一道类似的题目,大家可以作为练习。

一个数组包含 n 1 个成员,这些成员是 1 到 n 之间的整数。只有一个成员出现了两次,其他成员都只出现一次,请找出重复出现的那个数字。

五、参考链接

•That XOR Trick[1]

(完)

引用链接

[1]That XOR Trick:https://florian.github.io/xor-trick/

,

栏目热文

异或运算实例(异或运算是基本逻辑运算吗)

异或运算实例(异或运算是基本逻辑运算吗)

定义异或是一个数学运算,用于逻辑运算。如果 a、b 两个值不同,则异或结果为 1 ,否则结果为 0 。真值表如下:记真值...

2024-01-02 11:35:15查看全文 >>

异或运算基本公式(异或运算的运算定律)

异或运算基本公式(异或运算的运算定律)

1:异或运算(^)运算规则: 0^0=0; 0^1=1; 1^0=1; 1^1=0;操作计算数数1111111数2000...

2024-01-02 11:39:34查看全文 >>

怎样刷睫毛膏才不会苍蝇腿(怎么涂睫毛膏才不会苍蝇腿)

怎样刷睫毛膏才不会苍蝇腿(怎么涂睫毛膏才不会苍蝇腿)

在所有的化妆步骤中,刷睫毛可以说是很有小心机的一步了。刷睫毛不仅能让眼睛在不经意间变大,还能让眉眼之间带有灵气,能为个人...

2024-01-02 11:23:16查看全文 >>

教你刷睫毛妙招(怎么刷睫毛才正确)

教你刷睫毛妙招(怎么刷睫毛才正确)

拥有一双迷人的大眼睛,是所有女生的梦想,尤其是在这个拼颜值的社会,一双会说话的大眼睛会显得人更有气质。但是如果天生眼睛就...

2024-01-02 11:16:51查看全文 >>

刷睫毛打底怎么避免苍蝇腿(怎么刷睫毛膏不会起苍蝇腿)

刷睫毛打底怎么避免苍蝇腿(怎么刷睫毛膏不会起苍蝇腿)

自拍时抢镜的除了迷人的唇色,长睫毛也会是个很好的加分项,让你眼神更加深邃的同时,还有放大眼睛的效果。长睫毛女明星中,较为...

2024-01-02 11:25:40查看全文 >>

逻辑异或运算图示(逻辑代数异或公式)

逻辑异或运算图示(逻辑代数异或公式)

引言字基本逻辑指令前世今生:汇编作为较为底层的编程语言,其最直观的操作寄存器使得它的执行效率非常的高,因此,汇编中会大量...

2024-01-02 11:13:00查看全文 >>

异或逻辑表达式计算例子(异或逻辑表达式化简公式)

异或逻辑表达式计算例子(异或逻辑表达式化简公式)

前言:前面我们介绍了SCL语言的基本概念,接下来我们来看一下,SCL语言中的表达式与运算符,以及运算优先级的相关知识点。...

2024-01-02 11:33:37查看全文 >>

逻辑异或公式推导(逻辑或与非的运算公式)

逻辑异或公式推导(逻辑或与非的运算公式)

之前探讨了关于计算机是怎样一步步被人类不断推进演变的过程,今天,我们将从抽象层面带大家感受一下计算机复杂的一面。从昨天讲...

2024-01-02 11:57:00查看全文 >>

异或运算的逻辑表达式是(或运算的逻辑表达式是什么)

异或运算的逻辑表达式是(或运算的逻辑表达式是什么)

4个按位逻辑运算符都用于整型数据,包括char。之所以叫作按位(bitwise)运算,是因为这些操作都是针对每一个位进行...

2024-01-02 11:22:40查看全文 >>

异或运算表达式(运算异或运算)

异或运算表达式(运算异或运算)

C中有按位逻辑运算符:按位取反、按位与、按位或、按位异或。这4个运算符可以用于整型,包括char类型。按位操作针对每一个...

2024-01-02 11:27:00查看全文 >>

文档排行