& 0xff 的作用

& 0xff 的作用

&表示按位与,只有两个位同时为1,才能得到1, 0x代表16进制数,0xff表示的数二进制1111 1111 占一个字节.和其进行&操作的数,最低8位,不会发生变化**

作用1、取得低八位:

例如:0x1234 表示为二进制 0001 0010 0011 0100
遵照**&运算规则:1 & 1 = 1;1 & 0 =0;**
且 oxff 与 0x123 进行 & 操作时 oxff 会按高位补0的规则补充到16位:
0xff : 0000 0000 1111 1111

0x1234 & 0xff = 0011 0100;
可以取得低八位。

同理,也可以取高八位
0x1234 >>> 8 & 0xff = 0001 0010

作用2、保证补码的一致性:

  • 计算机是用补码来存储数字的;
  • 正数的补码等于原码;
  • 负数的补码等于反码+1;
  • 一个数的补码的补码等于原码。

-127原码1111 1111,反码1000 0000,补码1000 0001。计算机存储的是1000 0001,用十六进制表示为0x81。
将它转换为int时:
使用补符号位扩展,结果为: 1111 1111 1111 1111 1111 1111 1000 0001
  用十六进制表示为0xFFFFFF81。为了计算十进制值,计算它的补码,结果为: 1000 0000 0000 0000 0000 0000 0111 1111
  将这个二进制数转成十进制的结果是-127

当使用补零扩展时:
结果为: 0000 0000 0000 0000 0000 0000 1000 0001
  用十六进制表示为0x81。为了计算十进制值,计算它的补码,结果为: 0000 0000 0000 0000 0000 0000 1000 0001
  将这个二进制数转成十进制的结果是129

故:
(1)使用补零扩展能够保证二进制存储的一致性,但不能保证十进制值不变。
(2)使用补符号位扩展能够保证十进制值不变,但不能保证二进制存储的一致性。

但是当我们做 byte->int的时候,真的都是关注它十进制真值一致吗。显然不是。
例如:当拿到一个文件的 byte[] 数组时,我们关注的很显然是它存储的二进制存储的补码。所以这时我们再将其进行转换时就要保证它补码的一致性了。 而 & 0xff 就是标准的补0拓展。

所以 &0xff 也是为了保证补码的一致性

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值