位运算符使用
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)
这只是处理器的性能优化,结果相同。
在做练习题的时候,遇到了一个代码:
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)
这只是处理器的性能优化,结果相同。