ayuda

01/07/2003 - 18:49 por Guillermo Roldán | Informe spam
A ver si alguien puede ayudarme con este método.

public class Prueba {
public static void main(String[] args) {
System.out.print((8 << -1));
}
}

Como 8 en binario sería 00001000, al rotarlo -1 hacia la izquierda, yo
esperaba que lo rotase 1 hacia la derecha, y en consecuencia devolviera 4,
es decir, 000001000. Pues NO!... no se que coño hace que me devuelve 0!!!


Guillermo Roldán

email: guillermo_rolda@mixmail.com
http://www34.brinkster.com/williemirror
 

Leer las respuestas

#1 Juan Carlos Paramá
03/07/2003 - 18:13 | Informe spam
Hola,

"Guillermo Roldán" escribió en el
mensaje news:%2387nbJ$
A ver si alguien puede ayudarme con este método.

public class Prueba {
public static void main(String[] args) {
System.out.print((8 << -1));
}
}

Como 8 en binario sería 00001000, al rotarlo -1 hacia la izquierda, yo
esperaba que lo rotase 1 hacia la derecha, y en consecuencia devolviera 4,
es decir, 000001000. Pues NO!... no se que coño hace que me devuelve 0!!!




Por que estas "esperando" mal :)

Al rotar -1 bit no cambias el sentido del desplazamiento. Lo que el operador
<< hace
es evaluar tanto la parte iquierda como la derecha en complemento a dos.

<inciso>
y además solo tomar los bits necesarios según el tamaño del operando
izquierdo. Es decir,
para un int no tiene sentido hacer 8 << 33 ya que solo tiene 32 bits, por lo
tanto el operador
<< solo utiliza los cinco bits inferiores del segundo operando para el
desplazamiento (con
un long utiliza 6).
</inciso>

Ahora el problema: -1 en complemento a dos es 1111 1111 y el operador solo
utiliza los cinco
bits inferiores (11111 = 31 en decimal), por lo tanto estas desplazando el
único bit a uno que
tienes fuera de los limites del entero y por eso te aparece cero.

Si pruebas 1 << -1 verás que es igual a 1 << 31 porque -1 y 31 son los mismo
para el operador <<
y lo que hace es desplazar el primer bit hasta la posición del último.

Saludos (y perdón por el tamaño del mensaje)

Juan Carlos Paramá

Preguntas similares