Java speichern von zwei int-Werte, die in einer langen
Ich speichern möchte zwei int-Werte in einer langen (anstatt eine neue zu erstellen Point
Objekt jedes mal).
Derzeit, habe ich versucht, diese. Es funktioniert nicht, aber ich weiß nicht, was ist falsch mit ihm:
//x and y are ints
long l = x;
l = (l << 32) | y;
Und ich bin immer der int-Werte in etwa so:
x = (int) l >> 32;
y = (int) l & 0xffffffff;
Du musst angemeldet sein, um einen Kommentar abzugeben.
y
immer ist sign-extended in die erste snippet, das überschreiben würdex
mit-1
wenny < 0
.In der zweiten Ausschnitt, den cast zu
int
durchgeführt, bevor die Verschiebung, sox
wird tatsächlich der Wert desy
.0xffffffff
(ohne L), dann ist es nur ein int, ist so dass die&
ist ein no-op und diey
noch bekommt Vorzeichen erweitert.Hier ist eine weitere option, die verwendet einen bytebuffer statt bitweise Operatoren. Speed-Weise, es ist langsamer, etwa 1/5 der Geschwindigkeit, aber es ist viel einfacher zu sehen, was passiert:
Long.BYTES
, sogar deutlicher als die Magische Zahl 8.y = buffer.getInt(4);
- das argument ist der byte-offset, so ist es 4.