关于Java中“+”加运算符和“<<”向前移位运算符混合使用时出现的错误
2016-04-29 22:45
716 查看
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对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树