Ho usato l'operatore >> per il cambio a destra. Ora l'ho appena sostituito con >>> e ho trovato lo stesso risultato. Quindi non riesco a capire se questi due sono fondamentalmente uguali o meno.Qual è la differenza tra operatore >> e operatore >>> in java?
5
A
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