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

前端之家收集整理的这篇文章主要介绍了java – 按位与0xff进行比较重要吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
对于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变成11111111 11111111,仍然是-1,但这个时间是短暂的.

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

-1: 11111111 1111111
0xFF: 00000000 1111111
======================
 255: 00000000 1111111

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

猜你在找的Java相关文章