您的位置:首页 > 其它

异或的疑惑

2015-10-28 11:07 148 查看
摘要: 异或,有人叫半加、数学系的叫按位模2加

异或的疑惑

异或,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加法运算定义为:

0+0=0 0+1=1 1+0=1 1+1=0

例如0101+0011=0110,列竖式计算:

0 1 0 1

+0 0 1 1

──────

0 1 1 0

②模2减法运算定义为:

0-0=0 0-1=1 1-0=1 1-1=0

例如0110-0011=0101,列竖式计算:

0 1 1 0

- 0 0 1 1

──────

0 1 0 1

③模2乘法运算定义为:

0×0=0 0×1=0 1×0=0 1×1=1

多位二进制模2乘法类似于普通意义上的多位二进制乘法,不同之处在于后者累加中间结果(或称部分积)时采用带进位的加法,而模2乘法对中间结果的处理方式采用的是模2加法。例如1011×101=100111,列竖式计算:

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÷1=0 1÷0=? 1÷1=1

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

1 1 1 0

────────

1 0 1 1〕1 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