簡體   English   中英

使用 Java 中的位移位獲取存儲的數字

[英]getting stored numbers using Bit Shifting in Java

我在嘗試對這部分代碼進行逆向工程時遇到了麻煩; 我需要能夠從 l 獲得 x、y、z 任何人都能夠指出我正確的方向。 謝謝

 int l = ((X << 20) + (Y << 19) + Z);

范圍如下

X = 0 - 4095
Y = 0 - 1
Z = 0 - 384,794

X 為 0-4095 = 12 位

Y 為 0-1 = 1 位

Z 為 0-384794 = 19 位

Java 整數是 32 位的,所以從 0 開始:

int l = 0000 0000 0000 0000 0000 0000 0000 0000

+ X << 20 = X 的值,向右移動 20 位。 所以:

int l = XXXX XXXX XXXX 0000 0000 0000 0000 0000

+ Y << 19 = Y 的值,向右移動了 19 位。 所以:

int l = XXXX XXXX XXXX Y000 0000 0000 0000 0000

+ Z = Z 的值,移動了 0 個位置。 所以:

int l = XXXX XXXX XXXX YZZZ ZZZZ ZZZZ ZZZZ ZZZZ

由於沒有位被覆蓋,我們可以恢復它們:

int x = l >> 20 & 0xFFF;   //reverse the shifting (by 20), then isolate the X bits (0xFFF = 12 bits set to 1, equal to 4095)
int y = l >> 19 & 0x1;     //reverse the shifting (by 19), then isolate the Y bit (0x1 = 1 bit set to 1, equal to 1)
int z = l & 0x7FFFF;       //no shifting to reverse, but we still isolate the Z bits (0x7FFFF = 19 bits set to 1, equal to 524287)

暫無
暫無

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

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