2010-08-25 7 views

Respuesta

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

Observe que debe y el valor short con 0xFFFFL aquí, de lo contrario sign extension va a hacer que el código para romper (todos de alta se establecerán bits en el resultado, independientemente de su valor original en el long) si el short es mayor o igual que 0x8000.

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

Como está escrito actualmente, esto se romperá si 's> = 0x8000', ya que Java firmará-extenderá' s' cuando lo convierta de 'corto' a' largo' para realizar el OR a nivel de bit. Ver también la edición que acabo de hacer en mi respuesta. – bcat

+0

Sí, eso es cierto, repararé el mío también. – erickson

Cuestiones relacionadas