首页 > 编程知识 正文

异或和是什么(异或、异或和 的性质与应用)

时间:2023-05-06 12:01:08 阅读:121683 作者:2053

或者,一种基于二进制的位运算,由符号XOR或^表示,其中运算符两侧数的每个位的等值取0,等值取1。 与布尔运算的区别在于,如果运算符两侧为1,则布尔运算的结果为1,异或运算的结果为0。

简单来说,就是不进位的加法,例如1 1=0,00=0,10=1。

性质

1、交换规律

2、结合律(即(a^b ) c==a ^ (b ^ c ) ) )

3、对于任何数量x,都有x^x=0、x^0=x

4、自反性A XOR B XOR B=A xor 0=A

异或运算在多项式除法运算中最常见,但最重要的性质是自反性。 A XOR B XOR B=A,即对于给定的数a,用同一运算符(b )进行两次异或运算也能得到a本身。 这是一个不可思议的性质,利用这个性质,可以得到很多有趣的应用。 例如,所有程序教科书都指出,要交换两个变量的值,必须引入中间变量。 但是,使用异或可以节省变量的存储空间。 如果有a、b两个变量,分别存储a、b的值,则以下三行公式交换值表达式(值)。

a=axorb(axorb ) )。

b=bxora(bxoraxorb=a ) ) )。

a=axorb(axorbxora=b ) ) )。

同样,该运算可应用于加密、数据传输、验证等多个领域。

运行距离:

1-1000排列成包含1001个元素的数组,只有唯一的元素值重复,其他只出现一次。 数组元素只能访问一次。 设计算法,找到它。 是否可以在不使用辅助存储空间的情况下设计算法实现?

zrdlr,显然已经提出了很棒的解法。 请把所有的数加起来,减去1(2)…1000之和。 这个算法足够完美,我相信出题人的标准答案就是这个算法。 唯一的问题是数列太大可能会溢出。 霸气储物柜,异或没有这个问题,性能更好。 对所有数进行异或,对得到的结果和1^2^3^.^1000的结果进行异或,得到的结果为重复数。 虽然这个算法很简单,但要证明并不是一件容易的事。 这与异或运算的一些特性有关。 首先是异或运算满足交换律、结合律。 因此,无论这两个n出现在哪个位置,1^2^.^n^.^n^.^1000都可以转换为1^2^.^1000^(n^n )的形式。 其次,对于任何数x,都有x^x=0、x^0=x。 因此,1 ^2^ . ^ n ^ . ^ n ^ . ^ 1000=1^2^ . ^ 1000 ^ (n ^ n )=1^2^.^1000^0=1^2^.^1000 t^(t^n )=n。 所以,取所有数异或得到的结果和1^2^3^.^1000的结果异或得到的结果就是重复数。 当然,也有人说1(2) ) 1000的结果有高斯定律,所以可以快速计算,但实际上1^2^…) ^1000的结果也有定律,算法要比高斯定律简单得多。 谷歌问题变形:一个数组包含几个整数。 一个数出现奇数次,剩下的数出现偶数次。 找到这个奇数次出现的次数吗? 解法有很多,最好的是和上面一样,把所有的数异或,最后的结构是找。 原理是一样的。 http://longzxr.I.Sohu.com/blog/view/190676432.htm奇数个或其本身,偶数个为0; 0^a=a; 异或有交换法

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。