问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

异或、异或和 的性质及应用总结

创作时间:
作者:
@小白创作中心

异或、异或和 的性质及应用总结

引用
CSDN
1.
https://blog.csdn.net/Jasmineaha/article/details/81412711

异或运算(XOR)是计算机科学中一个基础且重要的逻辑运算,广泛应用于数据处理和算法设计中。本文将从异或的基本概念出发,详细介绍其性质,并通过具体问题展示其应用场景。

一:异或的含义

在数学中,“或”运算表示一个元素在集合A中或在集合B中。而“异或”则表示两个集合中独有的元素,不允许共存。具体来说:

  • A 或 B 的维恩图如下:

  • A 异或 B 的维恩图如下:

  • A 异或 B 异或 C 的维恩图:

异或运算的真值表如下(F表示false,T代表true):

A
B
A ⊕ B
F
F
F
F
T
T
T
F
T
T
T
F

二、异或的性质:满足交换律和结合律

异或运算具有以下重要性质:

  • 交换律:A ^ B = B ^ A
  • 结合律:A ^ (B ^ C) = (A ^ B) ^ C
  • 恒等律:X ^ 0 = X
  • 归零律:X ^ X = 0
  • 自反:A ^ B ^ B = A ^ 0 = A
  • 取反:对于任意的 X: X ^ (-1) = ~X
  • 可逆性:如果 A ^ B = C 成立,那么 A ^ B = C,B ^ C = A

三、异或的应用

1. 找出重复的数字

问题:1-1000放在含有1001个元素的数组中,只有唯一的一个元素重复,找出这个重复的数字。要求不能使用辅助存储空间并且数组的每个元素只能访问一次。

解法一:将这1001个元素加起来的和减去1+2+……+1000,所得的值就是重复的数字(数据过大容易溢出)。

解法二:异或

将1001个数全部异或得到的值再与1^2^……^1000的结果再次异或,这样就避免了数据过大溢出的情况。

首先,异或运算满足交换律和结合律,即a^b = b^a,(a^b)^c = a^(b^c)。令重复的数字为n:

所以1 ^ 2 ^ … ^ n ^ n ^ … ^ 1000 = 1 ^ 2 ^ … ^ 1000 ^ (n ^ n) = 1 ^ 2 ^ … ^ 1000 ^ 0 = 1 ^ 2 ^ … ^ 1000(即序列中除了重复数字 n 以外所有数的异或。

如果令1 ^ 2 ^ … ^ 1000(序列中不包含n)的结果为T,那么1 ^ 2 ^ … ^ 1000(序列中包含n)的结果就是 T^n,T ^ (T ^ n) = n。

2. 找出出现奇数次的数

问题:一个数组存放若干整数,一个数出现奇数次,其余数均出现偶数次,找出这个出现奇数次的数。

解法与上面的解法二相同。由于异或运算的性质,所有出现偶数次的数都会相互抵消,最终剩下的就是出现奇数次的数。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号