什么<< =运算符在Java中意味着什么?

时间:2012-08-22 11:12:42

标签: java hashmap bit-manipulation bit

请您解释一下HashMap constructor中的代码段,特别是

  

容量<< = 1:

// Find a power of 2 >= initialCapacity
198         int capacity = 1;
199         while (capacity < initialCapacity)
200             capacity <<= 1;

4 个答案:

答案 0 :(得分:11)

相当于capacity = capacity << 1; 该操作将容量位向左移一位,相当于乘以2.

您发布的特定代码的最小权力为2,大于initialCapacity

因此,如果initialCapacity为27,则循环后capacity将为32(2 ^ 5)。

答案 1 :(得分:4)

就像var += 1大约等同于var = var + 1一样,您在此处看到的内容(var <<= 1)大约相当于var = var << 1,即“var1的{​​{1}}位置二进制左移var

的结果

在这个非常具体的情况下,它实际上是一种表达capacity *= 2的稍微(运行时)更快的方式(因为1位的按位左移相当于乘以2)。

答案 2 :(得分:3)

相当于

capacity = capacity << 1;

capacity中的位向左移一位(即00011011变为00110110)。

答案 3 :(得分:0)

每次从循环中出来时,'capacity'的值会因功率提高而增加2。

最初它是1,即2 ^ 0;第一次的操作(容量&lt;&lt; = 1)使其成为2 ^ 1然后是2 ^ 2,依此类推。 您可能希望在http://www.tutorialspoint.com/java/java_basic_operators.htm

上看到更多内容