日期:2014-05-20  浏览次数:20725 次

&运算符
我看到公司项目代码中有这样的代码

return src[offset + i] & 0xff ;

其中src 是一个 byte[] 类型

src[offset + i] & 0xff 得到的结果肯定就是src[offset + i ]啊 ,为什么还要 &0xff 这样操做一下?

------解决方案--------------------
如果src[offset + i]为负数怎么办?
------解决方案--------------------
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型

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