为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Smart猫小萌 2022-11-02 15:34:12
我想问一个简单的问题。我提供了一个非常简单的计算示例,我收到的结果与我的预期不同。有人可以解释我做错了哪一步吗?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   }
查看完整描述

1 回答

?
慕的地8271018

TA贡献1796条经验 获得超4个赞

位移运算符的优先级低于加法运算符,加法运算符的优先级低于乘法运算符,乘法运算符的优先级低于递增/递减运算符。另请注意,变量是从左到右评估的,而不管它们之间的运算符的优先级如何。

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

首先,做增量。

102 + 102 * 2 << 3 * 2 * 2 + 4

接下来,做乘法。

102 + 204 << 12 + 4

然后做加法。

306 << 16

位移导致20054016.

看起来你在评估x最右边的表达式时犯了错误。


查看完整回答
反对 回复 2022-11-02
  • 1 回答
  • 0 关注
  • 130 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号