当前位置: 首页 > 面试题库 >

用0xff按位与重要吗?

詹唯
2023-03-14
问题内容

就此而言,与0xff进行按位AND运算本质上不是意味着要返回相同的值吗?

byte[] packet = reader.readPacket();
short sh;
sh = packet[1];
sh &= 0xFF;
System.out.print(sh+" ");

奇怪的是,如果未包含ANDing,我将得到-1,而包含ANDing则得到255。有人可以解释原因吗?

在我看来0xff只是11111111。不是吗?


问题答案:

是的,0xff就是1111 1111。但这试图显示无符号字节值,即使在Java中byte已签名。该值0xff-1已签署byte,但它是255一个short

byte价值0xff被读取,打印值将产生-1。所以它分配给short具有更大的范围,并且可以存储byte值通常会溢出是一个负数作为byte为正整数,例如144作为byte0x90,或-112,但它可以被适当地存储为144作为short

因此,将的byte-1分配给short。但是,那是什么呢?进行原始的加宽转换,并对负值进行符号扩展。因此1111 1111变得11111111 11111111-1,但这次作为short

然后使用位掩码0xff00000000 11111111)再次取出最后8位:

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

这是获取无符号byte值的一种方法,方法是将其转换为short,然后从中屏蔽掉原始位byte,以将其显示为无符号值。



 类似资料:
  • 问题内容: 什么逻辑运营商之间的不同,和位类似物,在使用?各种解决方案的效率是否存在差异? 问题答案: 逻辑运算符对逻辑值进行运算,而按位运算符对整数位进行运算。停止考虑性能,并按其预期目的使用它们。

  • 问题内容: 假设我有以下情况: 和 然后首先访问,进入然后通知它并返回状态。调用在方法中的位置重要吗?即使将调用放置在方法内部的不同位置,我也没有注意到行为的变化。 拨打电话时,是否应立即通知? 问题答案: 该位置的内通话块并 不会 因为根据定义无所谓,如果你仍然在块,那么你仍然持有锁。 调用notify()时不应该立即通知线程吗? 是。调用将等待队列(等待条件)中的线程之一(如果有)放入阻塞队列

  • 我的目标是了解两者的互补性。 有符号整数中的等于。但是,如果您使用十六进制的或十进制的按位与它,它将等于。 在我看来,这不应该发生,因为顶部字节与结果字节相同 我的预期结果是该值不应该改变,它等于< code>-121。 我的实际结果是值发生变化。 我的猜测是,是一个。因此,顶部字节的有符号位和下部字节的无符号位将导致无符号位。但是......那不可能是对的。

  • 问题内容: 我正在使用PHP的用户角色/权限系统来编写脚本。 下面是使用位掩码方法获得phpbuilder.com权限的代码。 在该部分下面是一个简单得多的版本,w3hich可以在几乎没有该部分的情况下完成相同的操作。 许多人建议使用位运算符,例如PHP中的设置和其他内容,但我从来不明白为什么。在下面的代码中,使用第一个代码而不是第二个代码有什么 好处 ? 非位版本 问题答案: 为什么不这样做呢?

  • 那么,在Java中,你们都用什么来处理它们呢?

  • 这是我的主班 这是我的控制器类 这是我的fxml文件 我怎么才能修好它?我从这里尝试一切JavaFX“位置是必需的”即使它在同一个包中 更新: