2010-03-26 13 views
5

C'è qualche motivo per pensare che gli operatori di spostamento di bit di destra (firmato) e >>> (senza segno) in Java funzionino diversamente? Non riesco a rilevare alcuna differenza sulla mia macchina.Qualsiasi prestazione diversa tra Java >> e >>> operatori di spostamento a destra?

Questa è puramente una domanda accademica; Sono sicuro che non sarà mai il collo di bottiglia. Lo so: è meglio scrivere ciò che intendi per primo; usa >> per divisione per 2, per esempio.

Suppongo che dipenda da quali architetture sono le operazioni implementate come un'istruzione.

+0

Penso che entrambi saranno convertiti in istruzioni native della CPU (logico/aritmetico a destra), che alla fine richiede cicli simili. – kennytm

+4

No, usa '/ 2' per la divisione di 2. –

+1

+1 per farmi cercare l'operatore >>>. E non sottovalutare l'ottimizzazione del compilatore. Spesso l'ottimizzazione a questo livello può persino peggiorare le cose. – Thirler

risposta

3

No. Il compilatore tradurrà questi in bytecode e JVM interpreterà il bytecode per la propria architettura. Penso che sia sicuro assumere che la tua architettura abbia un set di istruzioni che include entrambe le operazioni da eseguire in pochi cicli di clock.

In ogni caso, c'è una differenza nel comportamento di questi operatori, quindi non è che si possano semplicemente scambiarli.

+0

@Tim Bender: +1 ... Nel mondo x86, * ">> 1" * poiché P4 era solo un ciclo e poiché l'architettura P6 * ">> qualsiasi" * è solo un ciclo AFAIK. – SyntaxT3rr0r

+0

Penso che quella fosse la mia domanda: le architetture comuni implementano sia come istruzione? E sì, come ho detto, questo si applica solo nei casi in cui il comportamento è identico (numeri interi non negativi). –

Problemi correlati