6 Stimmen

Java: Ersetzen der letzten 16 Bits eines Long-Wertes durch einen Short-Wert

Ich habe einen Long und einen Short Ich möchte, dass die Bits des Short die niederwertigen 16 Bits des Long überschreiben.

Ex (zur besseren Lesbarkeit in 16-Bit-Blöcke unterteilt):

> long = 0xffff 0xffff 0xffff 0xffff
> short= 0x1234
> 
> output = (long)0xffff 0xffff 0xffff 0x1234

7voto

bcat Punkte 8676
static long foobar(long aLong, short aShort) {
    return aLong & 0xFFFFFFFFFFFF0000L | aShort & 0xFFFFL;
}

Beachten Sie, dass Sie AND die short Wert mit 0xFFFFL hier, sonst Zeichenerweiterung führt zum Abbruch des Codes (alle hohen Bits im Ergebnis werden gesetzt, unabhängig von ihrem ursprünglichen Wert in der long ), wenn die short größer oder gleich ist als 0x8000 .

6voto

erickson Punkte 256579
long l = ...;
short s = ...;
long n = (l & ~0xFFFF) | (s & 0xFFFFL);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X