关于Java中“+”加运算符和“<<”向前移位运算符混合使用时出现的错误

1 致谢

感谢张晓龙院长编写的《Java程序设计与开发》提供的资料

2 问题描述

今天遇到1个很奇怪的问题 写一句很简单的运算代码就出错了
想不明白为什么 
当时的初衷是这样的:想要完成1种运算
将整数subscript乘4后 加上整数hrirMonauralLength
实现的代码如下


按照设想来说 结果应为33792
但测试的结果为
32768 = 8192*4 这个结果是十分奇怪的
相当于后面的整数hrirMonauralLength并没有加上去 这是为什么呢?
感觉代码应该没有什么问题呀

3 解决方案

我想了一下 可能是运算符优先级的问题
于是我先实验了一下 在进行“<<”运算的时候加上了括号
代码如下
		int subscript = 8192;
		int hrirMonauralLength = 1024;
		System.out.println("subscript = " + ((subscript << 2) + hrirMonauralLength));
果然这回就正确了 说明很可能是运算符优先级不同导致的
于是我查询了一下刚刚提到的教材
发现果然如此 :在Java中 "+ -"运算符的优先级高于“<< >>”移位运算符的优先级
所以需要给“<<”运算的时候加上括号 以保证其优先进行计算

4 后记

以后将“<< >>”移位运算符和"+ -"运算符混合使用时 需要注意运算符的优先级


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值