operator operador logical bitwise java bit-shift

logical - unsigned right Shift ''>>>'' Operador en Java



java<= (1)

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

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?