1 自己与自己运算得到 0

1
2
3
4
    // 当 x = y 时, x ^ y = 0
    public static int method(int x, int y) {
        return x ^ y;
    }

2 在一定条件下使用异或实现减法效果

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
    // 假设 x 为 1024,那么当 y 在 [1024, 2047] 之
    // 间的时候异或都是减法的效果
    // 1024 = 0b00000100_00000000
    // 2047 = 0b00000111_11111111  ^
    // ------------------------------
    // res  = 0b00000011_11111111
    // 最高位相同为 0 抵消掉了
    // 
    // 那么条件就是其中一个数 x 为 2 的幂次
    // 另一个数的范围在 y = [x, 2 * x - 1] 之间
    // 这样这两个数的异或结果便是减法的效果

3 异或同样可以理解为不进位加法

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
    // 对于异或的特性
    // 0 ^ 0 = 0
    // 0 ^ 1 = 1
    // 1 ^ 0 = 1
    // 1 ^ 1 = 0
    // 可以发现,上面的运算规则可以理解为
    // 二进制的不进位加法
    // 所以对于标题二的一定条件下的减法效果
    // 其实就是进位了,但是进位效果失败了
    // 对于这种二进制的不进位加法,使用 2 的幂次的数
    // 进行相加比较好理解别的数计算不是很直观