Java:ConcurrentHashMap 的 initTable 方法末尾的 n - (n >>> 2) 是什么意思?

image
n 等于 16,通过 sc = n - (n >>> 2) 将 sc 赋值为 12,请问 n - (n >>> 2) 是什么高端写法?为什么要这么写?请大佬赐教

阅读 3.5k
2 个回答

>>> 无符号移位操作 这个就相当于 n-(n/(2^2))

n>>>2就是n无符号右移2位, 相当于最后面的小数点左移了2位, 相当于除以了2的2次方;
n>>>5 n缩小了 2的5次方倍:
就是说:
sc = n - n/2^2

    public static void main(String[] args) {
        int sc = 0;
        int n = 16;

        System.out.println("16>>>2 --> " + (16>>>2));

        sc = n - (n>>>2);
        System.out.println("n=16, sc = n - (n>>>2); sc = " + sc);
    }
    
16>>>2 --> 4
n=16, sc = n - (n>>>2); sc = 12

左移整个数往左边走,右面补0, 补一位, 就扩大2倍, 补n位就扩大2的n次方倍; 右移正相反~

推荐问题