我读到this关于转移的话题。我想如果我有两个字节:
byte hi = //...
byte low = //...
为什么我不能这样做
short s = (short)((hi << 8) | low)
为什么不正确?我认为我们将最高有效位左移 8 位,并按原样保留最低有效字节。然后只是按位或它们。
最佳答案
这给出了错误的结果,因为字节被签名并扩展为 int 来进行计算。举个例子
hi = (byte)0x01;
low = (byte)0x80;
然后你计算:
0x00000100 | 0xffffff80 -> 0xffffff80
这不是想要的结果。
你可以这样写:
short s = (short)((hi << 8) | (low & 0xff))
关于java - 为什么仅通过移位转换两个字节是不一致的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45656798/