关于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 后记

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


你可能感兴趣的:(java,位运算)