加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 按位与0xff进行比较重要吗?

发布时间:2020-12-14 16:46:42 所属栏目:Java 来源:网络整理
导读:对于0xff来说,不按位和AND基本上意味着得到相同的值,在这段代码中呢? byte[] packet = reader.readPacket();short sh;sh = packet[1];sh = 0xFF;System.out.print(sh+" "); 奇怪的是,如果ANDing不包括但是包含255则可以得到-1可能有人解释原因? 正如我所看
对于0xff来说,不按位和AND基本上意味着得到相同的值,在这段代码中呢?
byte[] packet = reader.readPacket();
short sh;
sh = packet[1];
sh &= 0xFF;
System.out.print(sh+" ");

奇怪的是,如果ANDing不包括但是包含255则可以得到-1可能有人解释原因?

正如我所看到的那样,0xff只是1111 1111.不是吗?

解决方法

是的,0xff只是1111 1111.但这是尝试显示无符号字节值,即使在Java字节中被签名.对于有符号字节,0xff的值为-1,而在短时间内为255.

当读取字节值0xff时,打印该值会产生-1.因此,它被分配给具有更大范围的短,并且可以存储正常溢出为负数的字节值作为正整数的字节,例如. 144为一个字节是0x90或-112,但它可以正确存储为144作为一个短.

所以-1的字节值被分配给一个short.但是做什么呢?发生原始的扩展转换,负值被符号扩展.所以1111 1111变成22222111 22222111,仍然是-1,但这个时间是短暂的.

然后使用位掩码0xff(00000000 22222111)再次获取最后的8位:

-1: 22222111 2222211
0xFF: 00000000 2222211
======================
 255: 00000000 2222211

这只是一种获得无符号字节值的方法,通过将其转换为短字符,然后从字节屏蔽原始位,将其显示为无符号值.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读