在练习问题时,我遇到了一个代码:
private char[] a;
int newcap = ((a.length * 3) >> 1) + 1;
其中newcap是数组的新容量,
使用((a.length*3)+1)
也足够了,但他们使用了一个按位运算符。为什么?
我知道使用按位运算符。
代码来自http://www.java2s.com/Tutorials/Java/Collection/ArrayList/Create_a_Char_Array_List_in_Java.htm
答案 0 :(得分:1)
它不会相同,向右移1位与2除法相同。
例如,10 >> 1 = 5
。
在您的示例中,您将长度乘以3,然后除以2,最后将1加到结果中,以便"Using ((a.length*3)+1)"
不会“足够”。
但是,请注意((a.length*3) / 2 +1)
也会这样做。
请注意,您也可以使用按位运算符乘以2,但使用左移而不是右移。
System.out.println(10 << 1);//print 20
答案 1 :(得分:0)
<<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)
只有处理器的性能优化才能产生相同的结果。