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

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值