簡體   English   中英

移位錯誤值

[英]Bit Shifting wrong value

我有一個問題,我需要使用shift轉換坐標,然后將其轉換回原始坐標,但返回的值不相同(不能更改最小值,最大值)。

int x = 1000;
int y = -1000;

int minx = -294912; // can't be changed.
int miny = -262144; // can't be changed.

//Convert
int convertedX = x - minx >> 4;
int convertedY = y - miny >> 4;

//Convert back
int originalX = (convertedX << 4) + minx;
int originalY = (convertedY << 4) + miny;

System.out.println(originalX + " " + originalY + " - After Convert Back");

問題在於您的班次實際上被16除...因此您最終會丟失信息。 您無法准確表示任何不能被16整除的值(即,底四位不為0000的值)。

如果您不想丟失信息,則無法應用該轉變-就這么簡單。

(我個人x - minx放在方括號內,以使優先級清楚。這實際上並不會給您造成問題,但是除非人們了解了優先級規則,否則代碼不清楚。)

當您向右移動4時,您正在丟失信息。對於1000-1000的值,將丟失1位-右邊第4位。

如果將所有位移量都更改為3,或者將xy都更改為16的倍數,則得到相同的值,以便最后4位全為零,並且不會丟失任何信息。

暫無
暫無

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

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