位运算符使用

Bitwise Operator use

在做练习题的时候,遇到了一个代码:

private char[] a;
int newcap = ((a.length * 3) >> 1) + 1;

其中newcap是数组的新容量, 使用 ((a.length*3)+1) 也足够了,但是他们使用了按位 Operator.Why ?? 我知道按位运算符的使用。 代码来自http://www.java2s.com/Tutorials/Java/Collection/ArrayList/Create_a_Char_Array_List_in_Java.htm

不一样,右移1位和除以2是一样的

例如,10 >> 1 = 5.

在您的示例中,您将长度乘以 3,然后除以二,最后将结果加 1,因此 "Using ((a.length*3)+1)" 不会是 "sufficient".

但是,请注意 ((a.length*3) / 2 +1) 也会做同样的事情。

请注意,您也可以使用按位运算符乘以 2,但使用左移而不是右移。

System.out.println(10 << 1);//print 20
<<n is often used instead of multiplication with (2 to the power of n)
>>n is often used instead of division by (2 to the power of n)

这只是处理器的性能优化,结果相同。