gpt4 book ai didi

scala - 位移和符号

转载 作者:行者123 更新时间:2023-12-01 09:18:25 25 4
gpt4 key购买 nike

让我从问题开始:

  def word(byte1 : Byte, byte2 : Byte, byte3 : Byte, byte4: Byte) : Int = {
((byte4 << 0)) | ((byte3 << 8)) | ((byte2 << 16)) | ((byte1 << 24))
}

这里的目标很简单。给定 4 个字节,将它们打包成一个 Int

上面的代码不起作用,因为移位运算符似乎试图保留符号。例如,这个:

word(0xFA.toByte, 0xFB.toByte, 0xFC.toByte, 0xFD.toByte).formatted("%02X")

当我期望 FAFBFCFD 时产生 FFFFFFFD

让问题变小:

0xFE.toByte << 8

在二进制补码中产生 -2,而不是 0xFE00。

如何在没有标志问题的情况下进行轮类?

最佳答案

将字节与 0xFF 相加,以撤消移位前符号扩展的影响:

((byte4 & 0xFF) << 0) | ((byte3 & 0xFF) << 8) | ...

关于scala - 位移和符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38618821/

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