gpt4 book ai didi

java - 为什么仅通过移位转换两个字节是不一致的?

转载 作者:行者123 更新时间:2023-11-30 02:26:05 25 4
gpt4 key购买 nike

我读到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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com