2010-08-25 9 views

Répondre

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

Notez que vous devez et la valeur short avec 0xFFFFL ici, sinon sign extension causerez le code à briser (tout haut bits dans le résultat seront définies, indépendamment de leur valeur d'origine dans le long) si le short est supérieur ou égal à 0x8000.

6
long l = ...; 
short s = ...; 
long n = (l & ~0xFFFF) | (s & 0xFFFFL); 
+0

Comme cela est actuellement écrit, cela s'arrêtera si 's> = 0x8000', car Java signera-étend' s' quand il le convertira de 'short' à' long' pour effectuer le OU au niveau du bit. Voir aussi la modification que je viens de faire sur ma réponse. – bcat

+0

Oui, c'est vrai, je vais réparer le mien aussi. – erickson