XOR的运算原理
1、异或也叫半加运算,数学符号为“⊕”,其运算法则相当于不带进位的二进制加法:二进制用1表示真,0表示假,则异或的运算法则为:0⊕0=0、1⊕0=1、0⊕1=1、1⊕1=0(同为0,异为1),这些法则与加法都是相同的,只是不带进位,所以异或常被认作不进位加法。
2、现在对一组字节进行一次运算,看看原理
对这四个字节先进行简单的xor 01后变成了13 12 15 14
接下来把异或前后的这些字节展开,转为二进制进行对比
1 | 2 | 1 | 3 | 1 | 4 | 1 | 5 | |||
0001 | 0010 | 0001 | 0011 | 0001 | 0100 | 0001 | 0101 | |||
1 | 3 | 1 | 2 | 1 | 5 | 1 | 4 | |||
0001 | 0011 | 0001 | 0010 | 0001 | 0101 | 0001 | 0100 |
12变13(00010010变00010011)我们看看上面讲过的“同为0,异为1”我们对二进制进行运算,先看12变13,这个字节的第一位都可以不看,因为异或前后它都没有变化,异或一位数只与后一位字节进行运算,所以我们直接看后一位2和3,因为我们是异或的01转为二进制为0010⊕0001所以就用这两个字节的最后一位进行对比,从右到左计算0⊕1属于“异为0”所以得出为0,下一个也是a⊕b的格式结果也为0(如果遇到了a⊕a结果就为a)
3、刚刚是进行的异或一位数的运算,异或两位数也是一样的,只是前后两个字节都要算但道理是一样的0⊕0=0、1⊕0=1、0⊕1=1、1⊕1=0 (同为0,异为1)