当前位置:  开发笔记 > 编程语言 > 正文

位移> 32位长

如何解决《位移>32位长》经验,为你挑选了1个好方法。

我试图从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".

例如,decryptedVCW的十六进制是E865037A9C6424,其中二进制是:

11101000011001010000001101111010100111000110010000100100

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

1111010111111000110010100000011

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

非常感谢Shiv



1> Eran..:

类型decryptedVCW[2] & 0xffint,因为第一个操作数是byte,第二个是int文字.

当运算<<符的第一个操作数是int,你正在移位一个int,所以如果第二个操作数是32,你就会int溢出.

您可以将运算<<符的第一个操作数强制转换为long:

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

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

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

推荐阅读
linjiabin43
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有