异或的疑惑

异或的疑惑

异或,XOR,当两数相同否,而数不同时为真。

异或,有人叫半加、数学系的叫按位模2

律:a ^ b = b ^ a;

合律:a ^ ( b ^ c ) = ( a ^ b ) ^ c

恒等律:a ^ 0 = a

零律:a ^ a = 0

自反律:a ^ b ^ b = a ^ 0 = a

 

2运算

2运算是一种二制算法,与四运算相同,模2运算也包括模2加、模2减、模2乘、模2除四种二制运算。而且,模2运算也使用与四运算相同的运算符,即“+”表示模2加,“-”表示模2减,“×”或“·”表示模2乘,“÷”或“/”表示模2除。与四运算不同的是模2运算不考虑进位和借位,即模2加法是不带进位的二制加法运算,模2减法是不借位的二制减法运算。这样,两个二制位相运算两个位的就能确定运算果,不受前一次运算的影响,也不下一次造成影响。

 

①模2加法运算定义为

000        011        101        110

例如010100110110,列算:

  0 1 0 1

0 0 1 1

──────

  0 1 1 0

 

②模2减法运算定义为

000        011        101        110

例如011000110101,列算:

   0 1 1 0

0 0 1 1

──────

   0 1 0 1

 

③模2乘法运算定义为

0×00        0×10        1×00        1×11

多位二制模2乘法似于普通意上的多位二制乘法,不同之在于后者累加中间结果(或称部分采用带进位的加法,而模2乘法间结果的理方式采用的是模2加法。例如1011×101100111,列算:

       1 0 1 1

     ×  1 0 1

    ──────

       1 0 1 1

     0 0 0 0

1 0 1 1

────────

   1 0 0 1 1 1

 

④模2除法运算定义为

0÷0?        0÷10        1÷0?        1÷11

多位二制模2除法也似于普通意上的多位二制除法,但是在如何确定商的问题上两者采用不同的规则。后者按借位的二制减法,根据余数减除数减与否确定商1是商0,若1,否0。多位模2除法采用模2减法,不借位的二制减法,因此考余数减除数与否是没有意 的。实际上,在CRC运算中,能保除数的首位12除法运算的商是由余数首位与除数首位的模2除法运算果确定。因除数首位1,按照模2 除法运算法,那么余数首位是1就商1,是0就商0。例如1100100÷10111110……110,列算:

               1 1 1 0

       ────────

1 0 1 11 1 0 0 1 0 0

      1 0 1 1

      ──────

           1 1 1 1

        1 0 1 1

       ──────

             1 0 0 0

          1 0 1 1

         ──────

               0 1 1 0

            0 0 0 0

           ──────

                 1 1 0

 

2除(按位除)

 

2除做法与算除法似,但每一位除(减)的果不影响其它位,即不向上一位借位。所以实际上就是异或。然后再移位移位做下一位的模2减。步如下:

 

a、用除数被除数最高几位做模2减,没有借位。

b、除数右移一位,若余数最高位1,商1,并余数做模2减。若余数最高位0,商0,除数继续右移一位。

c、一直做到余数的位数小于除数余数就是最余数。

 

晕!都是异或!疑惑!

 


你可能感兴趣的:(异或,XOR)