java byte&0xFF是为了保持二进制一致性

      近期做项目遇见了RC4加密算法,看到了网上的代码中byte类型的数字会&0xff,百思不解。遂在网上搜索,百般查找,终于能懂了一部分。

      java的负整数在计算机里存储是用补码的形式存储的。(正整数也可以说是补码,因为对于正整数来说,原码、补码都是一样的)

       原码、反码、补码,简单说一下,正整数的原码、反码、补码一样。负整数的原码是符号位取反,其他保持不变,反码是原码的符号位保持不变,剩余的每位取反,补码是反码+1。

       byte是1个字节(一个字节8位),int是4个字节。byte转int时,会把高位补齐,补齐的规则:根据符号位补齐。比如:

       byte b=-12 ,补码:11110100(第一个1是符号位:0代表整数;1代表负数);

       b转化为int后的补码  :11111111111111111111111111110100,按照符号位高位全部补了1;

      因此,byte数值在转化为int类型时,负数的补码变了,为了保持在计算机中存储的二进制一致性,  b&0xff  后的补码:00000000 00000000 00000000 11110100;这样在计算机存储的二进制就没有变化(十进制有变化,符号位都变了)

      至于为什么&0xff,二进制没有变化,因为0xff的二进制:11111111,高位都是0,0&1还是0,所以b&0xff后二进制保持不变(0x:表示是16进制)

参考资料:http://www.cnblogs.com/think-in-java/p/5527389.html

 

 

 

 

你可能感兴趣的:(Java)