2012-07-07 1 views

risposta

6

Il primo segno di operatore: estende il valore, spostando una copia del bit di segno; il secondo si sposta sempre sullo zero.

Il motivo di ciò è di emulare numeri interi senza segno allo scopo di eseguire operazioni bit, compensando parzialmente la mancanza di tipi interi non firmati in Java.

11

>> è aritmetico (firmato) spostamento a destra, >>> è uno spostamento logico (senza segno) a destra, come descritto nello Java tutorial. Provali su un valore negativo e vedrai una differenza.

3

This explains it really well. Sulla stessa pagina c'è anche un breve example.

Ma per una vera e propria breve riassunto:

<< signed left shift - shifts a bit pattern to the left 
    0 0 1 1 1 => 0 1 1 1 0 

>> signed right shift - shifts a bit pattern to the right 
    0 0 1 1 1 => 0 0 0 1 1 

>>> unsigned right shift - shifts a zero into the leftmost position 
    1 1 1 0 => 0 0 1 1 

~ unary bitwise complement operator 
    A | Result 
    0 | 1 
    1 | 0 
    0 | 1 
    1 | 0 

& bitwise and 
    A | B | Result 
    0 | 0 | 0 
    1 | 0 | 0 
    0 | 1 | 0 
    1 | 1 | 1 

^ xor 
    A | B | Result 
    0 | 0 | 0 
    1 | 0 | 1 
    0 | 1 | 1 
    1 | 1 | 0 

| inclusive or 
    A | B | Result 
    0 | 0 | 0 
    1 | 0 | 1 
    0 | 1 | 1 
    1 | 1 | 1