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次方倍; 右移正相反~

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题