unsigned right Shift ‘>>>’ Operador en Java

Posible duplicado:
¿Por qué es (-1 >>> 32) = -1?

El operador de desplazamiento a la derecha sin signo inserta un 0 en el extremo izquierdo. Entonces cuando lo hago

System.out.println(Integer.toBinaryString(-1>>>30)) 

salida

 11 

Por lo tanto, está insertando 0 en el bit más a la izquierda.

 System.out.println(Integer.toBinaryString(-1>>>32)) 

salida

 11111111111111111111111111111111 

¿No debería ser 0?

Ver http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.19

Si el tipo promocionado del operando de la izquierda es int, solo se utilizan los cinco bits de orden más bajo del operando de la derecha como distancia de desplazamiento. Es como si el operando de la derecha estuviera sujeto a un operador AND lógico a nivel de bit & (§15.22.1) con el valor de máscara 0x1f (0b11111). Por lo tanto, la distancia de desplazamiento realmente utilizada está siempre en el rango de 0 a 31, inclusive.

eso es -1 >>> 32 es equivalente a -1 >>> 0 y -1 >>> 33 es equivalente a -1 >>> 1 y, especialmente confuso, -1 >>> -1 es equivalente a -1 >>> 31