Estoy haciendo un programa en java para una asignatura de criptografia de la universidad. Necesito una senzillísima función que me concatene 4 bytes distintos para formar un entero de 32 bits. Les pego la función.
Código:
public static concatena int (byte a,b,c,d)
{
return (a<<24) | (b<<16) | (c<<8) | d;
}
Sorprendentemente, no funciona bien para los valors a=0x61, b=0x62, c=0x63, d=0x80, ya que me retorna el entero 0xFFFFFF80 (????!!!).
Pero lo mas sorprendente es que si canvio la funcion así:
Código:
public static concatena int (byte a,b,c,d)
{
return (a<<24) | (b<<16) | (c<<8) | (d<<1);
}
Y la llamo con a=ox61, b=0x62, c=0x63, d=0x40 entonces SI que me devuelve el resultado esperado, que es logicamente 0x61626380.
¡¡¡¡Pero aun hay más !!!! Retoco otra vez la funcion original.
Código:
public static concatena int (byte a,b,c,d)
{
return (a<<24) | (b<<16) | (c<<8) | (d<<0);
}
Como veran, es exactamente la misma que la original, ya que dejar d tal como estava o hacer un ShiftLeft de 0 bits a d es lo mismo. Pues si esperan obtener el mismo resultado que antes, van equivocados ! Ahora lo que me devuelve la funcion és 0xFFFFFF00.
¿Es esto una nueva feature (dile bug, dile feature....)?¿Me oblidado de las lecciones de primero de carrera y ya no se como funcionan los shifts i las or?¿Mi gentoo se ha vuelto tan lista que decide ella sola las operaciones que hará sin tener en cuenta el código que ejecuta? ¿Ganará el Barça la Copa de Europa por fin (otra vez... que serian 2 ya)? ¿Estaría mal la ensaïmada que me comí para desayunar?
Como ven empiezo a desvariar, necesito ayuda.