gpt4 book ai didi

java ->32 位长的位移位

转载 作者:行者123 更新时间:2023-11-30 06:11:04 24 4
gpt4 key购买 nike

我正在尝试从 7 字节数组中提取前 49 位。我按如下方式使用掩码和位移来处理这个字节:

long byteVal = ((decryptedVCW[6] & 0xff)&((decryptedVCW[6] & 0xff)<<7)) | ((decryptedVCW[5] & 0xff) << 8) | ((decryptedVCW[4] & 0xff) << 16) | ((decryptedVCW[3] & 0xff) << 24) | ((decryptedVCW[2] & 0xff) << 32) | ((decryptedVCW[1] & 0xff) << 40) | ((decryptedVCW[0] & 0xff) << 48);

其中 decryptedVCW 是一个 56 位字节数组。

掩码和移位按预期工作,直到 32 位移位“<<32”。

例如,解密的VCW的十六进制为E865037A9C6424,其二进制为:

11101000011001010000001101111010100111000110010000100100

当我执行上述移位时,我得到二进制的 7AFC6503:

1111010111111000110010100000011

有谁知道为什么位移位在 32 向上时会崩溃以及如何解决这个问题?

非常感谢刀锋

最佳答案

decryptedVCW[2] & 0xff 的类型是int , 因为第一个操作数是 byte第二个是 int字面意思。

<< 的第一个操作数时运算符是 int , 你正在移动 int ,所以如果第二个操作数是 32,你会得到 int溢出。

您可以转换 << 的第一个操作数接线员到 long :

(((long)(decryptedVCW[2] & 0xff)) << 32)

或者您可以强制第一个操作数为 long通过使用 long & 中的文字操作,如@shmosel 所建议:

(decryptedVCW[2] & 0xFFL) << 32

关于java ->32 位长的位移位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34738676/

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