例子
首先来个例子
@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
综合以上问题,产生这个问题的原因就是:移位运算优先级低于加减运算