Java中的位移运算(优先级引发的问题)

例子

首先来个例子

    @Test
    public void testByte(){
        byte[] res = new byte[]{0x01,0x01};
        byte res1 = res[0];
        byte res2 = res[1];

        int data0 = (res1<<8)+res2;
        int data1 = res1<<8+res2;//请注意,位运算的优先级比加减还小
        int  data2 = res1*256+res2;
        System.out.println(data0+"|"+data1+"|"+data2);// 运行结果:257|512|257
    }

10机制,乘以10 进一位,与10进制一样,2进制 乘以2 进一位。8进制 乘以8 进一位。16进制 乘以16进一位。

理论上 data1=data2=data3,但是实际的运行结果显示,data2 异于 data1和data2.
实际上data2的值是这样来的

data2 = res1<<(8+res2) ; // 结果:512

综合以上问题,产生这个问题的原因就是:移位运算优先级低于加减运算

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容