[英]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.