XOR算子的意义

时间:2016-06-16 04:41:18

标签: bitwise-operators xor

嘿,有人可以解释一下XOR运算符的重要性以及使用它可以解决的所有问题。如果有人可以列出我们可以使用XOR运算符解决哪种类型的问题,这将非常有帮助。

先谢谢。

2 个答案:

答案 0 :(得分:3)

从XOR(^)的Truthtable开始:

x  y    x^y
0  0    0    
0  1    1
1  0    1
1  1    0

使用XOR可以解决的问题:

  1. 2个布尔函数xy的比较。

    If x and y are same then x ^ y = 0
    If x and y are different then x ^ y = 1
    
  2. 查找字节或整数的二进制表示中的1('1')数是奇数还是偶数。

    unsigned char a = 10;  //in binary representation 00001010 (even number of 1s)
    unsigned char b = 11;  //in binary representation 00001011 (odd number of 1s)
    Simply XORing all the bits will be give:
    * result = 1, if number of bits is odd
    * result = 0, if number of bits is even
    
  3. 使用{Point 2.}可以找到数据位的奇偶校验(奇偶校验位)。

        If even parity is required(i.e the data bits should have even number of 1s) then 
        if all the bits are XORed and if it gives the result 1 then 
        **Parity Bit = 1** else **Parity Bit = 0**.  
        Similar case can be made if odd parity of data bits are required.
    
  4. 在命题逻辑中if and only if (shortened iff) is a biconditional logical connectiveiff可以使用XNOR~XOR进行评估(即否定XOR)。

  5. 如果遇到涉及2个布尔函数AB的等式,例如{A'.B + A.B'},则此等式将缩减为A ^ B。使用基元运算符(AND(。),OR(+)和NEGATION('))求解{A'.B + A.B'}将导致5个运算,使用XOR(^)可以将其减少到1个运算。仅仅因为A^B = A'.B + A.B'。如果遇到的等式是{A'B' + AB},那么{A'B' + AB} = ~XOR(即XNOR或否定异或)。

  6. 如果需要将数据中的特定位反转(即1到0或0到1),那么只需将该位与1进行异或即可达到目的。

        data = 1010;
               ^^^^
               0001  (inverting the LSB, first bit from right)
      ---------------
      result = 1011 
    

答案 1 :(得分:1)

了解异或:

请注意:

A ^ B = A'.B + B'.A

而且,顾名思义

A ^ B =(A + B)%2

简单来说,按位XOR表示相同的位为1,不同的位为0

常规用途:

它可以在任何可以应用逻辑以消除相等的组件/成对的组件的地方使用。

例如一个问题,您可以查看哪双鞋不完整。您可以通过整数指定鞋子的类型。 您可以这样做:

xor = 0

n次:

xor ^ = shoe_type;

其中,^是大多数编程语言中XOR的运算符。

在这里,只有单一数量的整数保留在我们的变量xor中,成对出现的整数被评估为零。因为a ^ a = 0;