byte[] b2_groupno = new byte[2];int groupno = ((int)b2_groupno[0] & 0xFF)|(((int)b2_groupno[1] & 0xFF)<<8);b2_groupno[0]&0xFF  已经转换成int了,为什么还要 右移8位呢 , 这句话是什么意思? 中间还有个 |

解决方案 »

  1.   

    <<是左移,>>才是右移。& 0xFF的所用不是转int,(int)b2_groupno[0]已经转成int了,& 0xFF的作用通常是把高于8位以上的位全部置0,也就是把低8位当作一个字节提取出来,如果b2_groupno[0]本身是一个字节,而且非负的话,& 0xFF以后,结果不变,所以这个操作没什么意义。右半部份把b2_groupno[1]左移8位,也就是放到了8-15位的位置,再对左右两边按位求或,也就是把两个字节拼起来,执行的结果是,b2_groupno[0]右数的0-7位,b2_groupno[1]在8-15位。
      

  2.   

    看代码的意思似乎是要将一个连续的字节序列转化为具体数值;
    建议看看java.math.BigInteger里面已经实现了,用这个做比较方便!