异或^运算的应用

原创 2016年08月30日 15:17:08

1.异或运算

      关于异或,有两种计算。一是逻辑异或,一是按位异或。所谓逻辑异或就是运算数是true或者false。比如p1=true,p2=true,p1^p2。

      按位异或则是将变量转化为二进制,每一位分别异或。相同为0,不同为1。

      按位运算如&、|、^优先级位于关系运算符之后,逻辑运算符之前。

      好像不经常强调逻辑异或和按位异或,因为两者就是一个运算符表示。如逻辑&&和按位&,逻辑||按位|我们很容易分清。但是两者也没有本质的区别,只是两种分类而已。

2.异或的应用

例一:不使用其他变量实现a、b值的交换

下面三句即可解决:

a=a^b;    //此时a=a^b

b=a^b;    //此时b=a^b^b=a

a=a^b;    //此时a=a^b^a=b


这主要利用了异或的特性,两个相同的数异或为0,不同的数按位异或肯定不为0。这里的意思是不同的数按位异或肯定在某位异或时结果为1。如果结果中某位为1,则二进制转化为十进制肯定不为0。

由此,引出例二:

数组中的数除了有两个数出现一次,其他数都成对出现。怎样最快找到这两个只出现一次的数字呢?

其他数成对出现是个契机,想到异或便是法宝。

我们将数组的元素从头到尾异或,相同的数在异或的过程中必然抵消为0,最终的异或结果即为两个不同的数异或的结果。异或结果不为0,某位为1。说明这两个不同的数在异或结果为1的这位上不同。这样找到结果中为1的位,根据这位为1就能将数组中两个唯一只有一个数字分开异或,最终的结果就可以得到这两个唯一的数字了。

3.异或运算的更多应用

      比如格雷码、奇偶分频等更多应用请深入了解。

版权声明:本文为博主原创文章,未经博主允许不得转载。

异或运算与卡诺图的应用

  • 2010年09月15日 10:31
  • 58KB
  • 下载

位运算异或的应用 例题来自广东工业大学OJ

在一堆数字中只有两个数字只出现一次,其他的数字都出现两次。在此时使用位运算来找出两个这数字,复杂度O(n)。...

C语言总结之异或运算的一些特性及巧妙应用

1.一个数和自己做异或的结果是0。如果需要一个常数0,x86平台的编译器可能会生成这样的指令:  xorl %eax, %eax。不管eax寄存器里的值原来是多少,做异或运算都能得到0,这条指令比同...

C语言总结之异或运算的一些特性及巧妙应用

1.一个数和自己做异或的结果是0。如果需要一个常数0,x86平台的编译器可能会生成这样的指令: xorl %eax, %eax。不管eax寄存器里的值原来是多少,做异或运算都能得到0,这条指令比同样...

异或运算的应用与nimm博弈

异或运算的性质 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 =...

异或运算及其应用-查找奇数个数的数字

异或运算功能很强大。用的得当可以提高算法效率。 先说一下异或运算的运算法则: 1. a ^ b = b ^ a   2. a ^ b ^ c = a ^ (b ^ c) = (...

异或运算及其应用

异或是一种基于二进制的位运算,用符号XOR或者 ^ 表示, 其运算法则是对运算符两侧数的每一个二进制位,同值取0,异值取1。 它与布尔运算的区别在于,当运算符两侧均为1时,布尔运算的结果为...

异或位运算加密

  • 2015年12月16日 14:29
  • 2KB
  • 下载

异或运算扩展

  • 2013年01月06日 15:39
  • 28KB
  • 下载

用Java语言实现对十六进制字符串异或运算

前言:好久没有写博客,最近一年感觉真是好忙,各种做不完的工作。相信很多上班族都会有这种感觉。最近对NFC进行写卡操作,需要计算一个校验位。一般情况下,校验位多数是由前几个字节进行异或运算所得。 现在我...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:异或^运算的应用
举报原因:
原因补充:

(最多只允许输入30个字)