黑马程序员技术交流社区
标题:
运算符优先级的问题
[打印本页]
作者:
何堂红
时间:
2014-5-28 01:11
标题:
运算符优先级的问题
本帖最后由 何堂红 于 2014-5-28 17:21 编辑
今天老师给我们演示案例的时候,特别提醒了集合扩容1.5倍的算法时,需使用“arr.length+(arr.length
>>1)”,而不是“arr.length+arr.length>>1”,否则集合不能扩容。我就很好奇,除法运算的优先级不是高于+,-吗,回来试验一下,果然不行。
现在我对于这个结果不太理解,代码如下,请指点!谢谢!
package Practice.classroom_01;
public class Demo02 {
/*
* 需求:验证10+10>>1与10+(10>>1)的结果
* 原因:今天老师上课时,演示案例的时候特别提醒了集合扩容1.5倍的算法时,需使用“arr.length+(arr.length
* >>1)”,而不是“arr.length+arr.length>>1”,否则集合不能扩容。
*/
public static void main(String[] args) {
// 算术运算,用于对比
int i1 = 10 + 10 / 2;
int i2 = (10 + 10) / 2;
int i3 = 10 + (10 / 2);
// 位移运算
int i4 = 10 + 10 >> 1;
int i5 = (10 + 10) >> 1;
int i6 = 10 + (10 >> 1);
System.out.println("i1=" + i1); // 结果:i1=15
System.out.println("i2=" + i2); // 结果:i2=10
System.out.println("i3=" + i3); // 结果:i3=15
System.out.println("i4=" + i4); // 结果:i4=10
System.out.println("i5=" + i5); // 结果:i5=10
System.out.println("i6=" + i6); // 结果:i6=15
}
}
复制代码
作者:
何堂红
时间:
2014-5-28 08:35
额,还没人解答啊:(
作者:
塔罗
时间:
2014-5-28 09:43
楼主。你看看运算符优先级不就一目了然了吗?
优先级 描述 运算符
1 括号 ()、[]
2 正负号 +、-
3 自增自减,非 ++、--、!
4 乘除,取余 *、/、%
5 加减 +、-
6 移位运算 <<、>>、>>>
7 大小关系 >、>=、<、<=
8 相等关系 ==、!=
9 按位与 &
10 按位异或 ^
11 按位或 |
12 逻辑与 &&
13 逻辑或 ||
14 条件运算 ?:
15 赋值运算 =、+=、-=、*=、/=、%=
16 位赋值运算 &=、|=、<<=、>>=、>>>=
作者:
何堂红
时间:
2014-5-28 16:56
塔罗 发表于 2014-5-28 09:43
楼主。你看看运算符优先级不就一目了然了吗?
优先级 描述 运算符
1 括号 ()、[]
哦,是的,谢谢!
我把位移运算的右移跟除看作一样的优先级了。
每天围着代码转,有时候是会搞晕了,呵呵
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2