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 这只是一种获得无符号字节值的方法,通过将其转换为短字符,然后从字节屏蔽原始位,将其显示为无符号值. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |