0 | 0 = 0 1 | 1 = 1 0 | 1 = 1 1 | 0 = 1
0 ^ 0 = 0 1 ^ 1 = 0 0 ^ 1 = 1 1 ^ 0 = 1
0 & 0 = 0 1 & 1 = 1 0 & 1 = 0 1 & 0 = 0
0 + 0 =00 1 + 1 =10 0 + 1 =01 1 + 0 =01
结论:
1位二进制运算的低位就是异或运算的结果,进位就是与运算的结果。
而如果加法过程中不会出现进位的话,就只有两种情况:
1 + 0 = 1 0 + 1 = 1
可以看到,异或肯定没问题。
0 ^ 1 = 1 1 ^ 0 = 1
在这种特殊的情况下,或运算的规律也恰好满足。
0 | 1 = 1 1 | 0 = 1
拿PHP语言为例:
1|2=3 1+2=3 1^2=3
2|4=6 2+4=6 2^4=6
4|8=12 4+8=12 4^8=12
如果仔细看下这三个例子,就会发现它们的共同点,那就是每一位的加法都不会产生进位:
如果都是2的N次方的话,可以理解为 按位或与加法一样 也就是“+”与“|”通用。
比如 这种情况(2 ^ x+2 ^ y 且 x,y不相等)恰好不出现进位,所以才可以通过或运算得到加法运算的结果。