1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
    // 计算逻辑是位运算,非常高效
    // 同时这种计算方法可用于计算使用数组存储的完全二叉树的兄弟节点
    // 
    // 计算的逻辑很简单,由于异或运算为不同为 1,相同为 0
    // 那么 1 的二进制形式为 0b0000_0001,前面全是 0,最后一位为 1
    // 随便假设一个数 0b0000_1101
    // 将两个数叠在一起,方便观察
    // 0b0000_1101
    // 0b0000_0001 ^
    // -------------
    // 0b0000_1100
    // 可以发现,前面 0 & 0 那么相同为 0,后面 1 & 0 不同为 1,
    // 起到的效果便是只影响最后一位,前面的位不会受到影响
    // 只有最后一位如果原来是 0,计算后会变为 1,如果原来是 1,计算后会变为 0
    // 这便实现了偶数加一奇数减一的效果
    public static int method(int num) {
        return num ^ 1;
    }

    // 下面是测试用例
    public static void main(String[] args) {
        for (int i = 0; i < 3; i++) {
            int index = i;
            int index1 = method(index);
            int index2 = method(index1);
            System.out.println(i + " " + index1 + " " + index2);
            // 0 1 0
            // 1 0 1
            // 2 3 2
        }
    }