[英]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] & 0xff
是int
,由於第一操作數是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.