2015-05-02 12 views
6

Vedo una riga in un codice che sto guardando e che dice (12 >> 1) - 1). Stampo quel valore fuori e esce come un 5. Se cambio il 12 a 5, esce come un 1. Qual è il simbolo ">>" facendo esattamente? GrazieCosa significa ">>" in java

+0

sì, l'ho appena visto quando ho scritto 12 in binario. Grazie per la risposta! –

+1

Secondo link su Un famoso motore di ricerca Web per "operatore java >>: [Il tutorial ufficiale sugli operatori Java] (https://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html) –

+3

@fge No, è un turno giusto – pathfinderelite

risposta

10

12 è 1100 in binario. Uno spostamento a destra (>> è il bit operatore spostamento a destra) di un bit produce

1100 -> 0110 

che risulta essere 6.

Così abbiamo che,

6 - 1 = 5 
1

>> esegue operazioni aritmetiche spostamento a destra esempio:

12 >> 1 = 6 
-12 >> 1 = -6 
1

Vedi Bitwise and Bit Shift Operators

Il linguaggio di programmazione Java fornisce anche operatori che eseguono bit bit e bit sh ift operazioni su tipi interi. L'operatore di spostamento spostato a sinistra con segno << sposta un modello di bit a sinistra e l'operatore di spostamento a destra con segno >> sposta un motivo a bit verso destra. Il bit è fornito dall'operando di sinistra e il numero di posizioni da spostare dall'operando di destra. L'operatore di spostamento a destra senza segno >>> sposta uno zero nella posizione più a sinistra, mentre la posizione più a sinistra dopo >> dipende dall'estensione di segno.

(12 >> 1) - 1)   

>> turni binari 12(1100) 1 volte a destra.
12 >> 1 == 6(110)

6 - 1 == 5

8

>> è firmato operatore spostamento a destra. Cambia un po 'di schema a destra. Il pattern di bit è dato dall'operando di sinistra e il numero di posizioni da spostare dall'operando di destra.

Quando si spostano a destra 2 bit si eliminano i 2 bit minimi.

consente di dire, x = 00111011

Così, quando lo fai, x >> 2, risulta x = 00001110

Questo è essenzialmente la stessa cosa di divisione di un valore 4 o da 2 due volte.

Così, sotto il codice si tradurrà 4

byte val = 100; 
val = (byte) (val >> 2); 
System.out.println(val); 

Spiegando il tuo esempio:

  • La rappresentazione binaria di 12 è: 1100
  • 12 >> 1 equivale a 0110, che è 6 in decimale
  • così (12 >> 1) - 1) è equivalente a 6-1 ovvero 5