我看到公司项目代码中有这样的代码return src[offset + i] & 0xff ;其中src 是一个 byte[] 类型src[offset + i] & 0xff 得到的结果肯定就是src[offset + i ]啊 ,为什么还要 &0xff 这样操做一下?

解决方案 »

  1.   

    如果src[offset + i]为负数怎么办?
      

  2.   

    Java中的一个byte,其范围是-128~127的,而Integer.toHexString的参数本来是int,如果不进行&0xff, 那么当一个byte会转换成int时,对于负数,会做位扩展,举例来说,一个byte的-1(即0xff),会被转换成int的-1(即 0xffffffff),那么转化出的结果就不是我们想要的了。
     
    而0xff默认是整形,所以,一个byte跟0xff相与会先将那个byte转化成整形运算,这样,结果中的高的24个比特就总会被清0,于是结果总是我 们想要的。
    以上情况都是基于“你要把一个byte转换为int的时候用的
    你看看你们公司的这个函数返回值是什么类型 是不是int型 
      

  3.   

    &0xff 会将byte类型值变成int类型的值,同时将-128~0之间的负值都转成正值
      

  4.   


    红色部分这里能举例一下吗?比如将byte类型的-1 & 0xff 
    会将byte类型的-1转换什么样子的整形?
      

  5.   

    明白了。需求是将byte类型转换为int类型时,int的低八位完全跟byte一样,高八位全部补0所以通过将byte类型 & 0xff就可以实现保留第八位 ,其他位全部为0