35

Point毎回新しいオブジェクトを作成する代わりに、2 つの int を long に格納したいと考えています。

現在、私はこれを試しました。機能していませんが、何が問題なのかわかりません:

// x and y are ints
long l = x;
l = (l << 32) | y;

そして、次のように int 値を取得しています。

x = (int) l >> 32;
y = (int) l & 0xffffffff;
4

3 に答える 3

69

yは最初のスニペットで符号拡張されており、いつでも上書きxされます。-1y < 0

2番目のスニペットでは、toのキャストintはシフトの前に行われるため、x実際にはの値を取得しますy

long l = (((long)x) << 32) | (y & 0xffffffffL);
int x = (int)(l >> 32);
int y = (int)l;
于 2012-10-07T21:22:23.377 に答える