Java 运算符优先级究竟是如何工作的?

我想问一个简单的问题。


我提供了一个非常简单的计算示例,我收到的结果与我的预期不同。有人可以解释我做错了哪一步吗?


public static void main(String[] args) {

       int x  =1;

       int y = 101;

       int a = 2;



       int z =  ++y + y * a << 3 *2 * ++x + (x+=2);

       /*

       Step 1 int z =  ++y + y * a << 3 *2 * ++x + (3);

       Step 2 int z =  102 + 102 * 2 << 3 *2 * 4 + (3);

       Step 3 int z =  102 + 204 << 24 + (3);

       Step 4 int z =  306 << 27;

       Expected:41,070,624,768‬

        */


       System.out.println(z);

       //Actual: 20,054,016

   }


Smart猫小萌
浏览 131回答 1
1回答

慕的地8271018

位移运算符的优先级低于加法运算符,加法运算符的优先级低于乘法运算符,乘法运算符的优先级低于递增/递减运算符。另请注意,变量是从左到右评估的,而不管它们之间的运算符的优先级如何。int&nbsp;z&nbsp;=&nbsp;&nbsp;++y&nbsp;+&nbsp;y&nbsp;*&nbsp;a&nbsp;<<&nbsp;3&nbsp;*2&nbsp;*&nbsp;++x&nbsp;+&nbsp;(x+=2);首先,做增量。102&nbsp;+&nbsp;102&nbsp;*&nbsp;2&nbsp;<<&nbsp;3&nbsp;*&nbsp;2&nbsp;*&nbsp;2&nbsp;+&nbsp;4接下来,做乘法。102&nbsp;+&nbsp;204&nbsp;<<&nbsp;12&nbsp;+&nbsp;4然后做加法。306&nbsp;<<&nbsp;16位移导致20054016.看起来你在评估x最右边的表达式时犯了错误。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java