a destra senza segno Maiusc ‘>>>’ Operatore in Java

Possibile duplicato:
Perché è (-1 >>> 32) = -1?

L’operatore di spostamento a destra senza segno inserisce uno 0 nell’estrema sinistra. Quindi quando lo faccio

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

produzione

 11 

Quindi, sta inserendo 0 nel bit più a sinistra.

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

produzione

 11111111111111111111111111111111 

Non dovrebbe essere 0?

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

Se il tipo promosso dell’operando di sinistra è int, vengono utilizzati solo i cinque bit di ordine inferiore dell’operando di destra come distanza di spostamento. È come se l’operando di destra fosse sobject a un operatore AND logico bit a bit & (§15.22.1) con il valore di maschera 0x1f (0b11111). La distanza di spostamento effettivamente utilizzata è quindi sempre compresa tra 0 e 31.

questo è -1 >>> 32 è equivalente a -1 >>> 0 e -1 >>> 33 è equivalente a -1 >>> 1 e, soprattutto confuso, -1 >>> -1 è equivalente a -1 >>> 31