就此而言,与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作为byte
是0x90
,或-112,但它可以被适当地存储为144
作为short
。
因此,将的byte
值-1
分配给short
。但是,那是什么呢?进行原始的加宽转换,并对负值进行符号扩展。因此1111 1111
变得11111111 11111111
仍-1
,但这次作为short
。
然后使用位掩码0xff
(00000000 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“位置是必需的”即使它在同一个包中 更新: