黑马程序员技术交流社区

标题: 运算符优先级的问题 [打印本页]

作者: 何堂红    时间: 2014-5-28 01:11
标题: 运算符优先级的问题
本帖最后由 何堂红 于 2014-5-28 17:21 编辑

今天老师给我们演示案例的时候,特别提醒了集合扩容1.5倍的算法时,需使用“arr.length+(arr.length
>>1)”,而不是“arr.length+arr.length>>1”,否则集合不能扩容。我就很好奇,除法运算的优先级不是高于+,-吗,回来试验一下,果然不行。
     现在我对于这个结果不太理解,代码如下,请指点!谢谢!


  1. package Practice.classroom_01;

  2. public class Demo02 {

  3.         /*
  4.          * 需求:验证10+10>>1与10+(10>>1)的结果
  5.          * 原因:今天老师上课时,演示案例的时候特别提醒了集合扩容1.5倍的算法时,需使用“arr.length+(arr.length
  6.          *                 >>1)”,而不是“arr.length+arr.length>>1”,否则集合不能扩容。
  7.          */
  8.         public static void main(String[] args) {
  9. //                算术运算,用于对比
  10.                 int i1 = 10 + 10 / 2;
  11.                 int i2 = (10 + 10) / 2;
  12.                 int i3 = 10 + (10 / 2);
  13. //                位移运算
  14.                 int i4 = 10 + 10 >> 1;
  15.                 int i5 = (10 + 10) >> 1;
  16.                 int i6 = 10 + (10 >> 1);

  17.                 System.out.println("i1=" + i1);         // 结果:i1=15
  18.                 System.out.println("i2=" + i2);                // 结果:i2=10
  19.                 System.out.println("i3=" + i3);                // 结果:i3=15
  20.                 System.out.println("i4=" + i4);                // 结果:i4=10
  21.                 System.out.println("i5=" + i5);                // 结果:i5=10
  22.                 System.out.println("i6=" + i6);                // 结果:i6=15

  23.         }

  24. }
复制代码

作者: 何堂红    时间: 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