java移位运算的时候要关注运算符的优先级
今天有个需求场景,我想用Java左移位运算(<<)来实现其中的部分功能。执行结果出错的代码示例及执行结果如下:
public class Test2 {public static void main(String[] args) {byte[] bcd = new byte[1];bcd[0] = (byte)(1 << 4 + 2);System.out.println(bcd[0]);}}

将1左移四位再加上2,执行出来的结果是64,而不是我设想的18。每左移一位等于乘以2,左移四位相等于4个2相乘,也就是16,然后16和2相加应该等于18才对。
于是定位怎么能得到64这个结果?定位了一段时间发现,1<<(4+2),也就是将1左移6位会得到结果64。至此,问题原因找到了,原来java中移位运算符的优先级比加号的优先级低,导致先进行了加法运算,然后进行了移位运算,跟我设想的不同。我脑子中惯性认为应该是移位运算符优先级比加号优先级高。
找到了原因,修改起来就简单了,将移位运算符的地方加个括号保证先执行。今天对此有了更深的体会,优先级记不太清楚的地方就加个括号,这样稳妥些,省得靠记忆哪个运算符优先级高、哪个低。修改后的正确代码及执行结果如下:
public class Test2 {public static void main(String[] args) {byte[] bcd = new byte[1];bcd[0] = (byte)((1 << 4) + 2);System.out.println(bcd[0]);}}

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
