簡體   English   中英

位移大於32位長

[英]Bit shifting for >32 bit long

我試圖從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);

其中,解密的VCW是一個56位字節的數組。

屏蔽和位移位按預期工作,直到32位移位'<< 32'。

例如,解密的VCW的十六進制為E865037A9C6424,二進制形式為:

11101000011001010000001101111010100111000110010000100100

當我執行上述轉換時,我得到二進制形式的7AFC6503:

1111010111111000110010100000011

有誰知道為什么移位在32位以上會分開,以及如何解決這個問題?

非常感謝Shiv

的類型的decryptedVCW[2] & 0xffint ,由於第一操作數是byte ,第二個是一個int字面。

<<運算符的第一個操作數為int ,您正在移動一個int ,因此,如果第二個操作數為32,則將得到int溢出。

您可以將<<運算符的第一個操作數轉換為long

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

或者您可以通過在&操作中使用long字面量來強制第一個操作數變long ,如@shmosel所示:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM