按位运算符使用

时间:2015-04-11 16:03:50

标签: java bit-manipulation operators

在练习问题时,我遇到了一个代码:

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

2 个答案:

答案 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)

只有处理器的性能优化才能产生相同的结果。