2010-03-26 12 views
5

Y a-t-il des raisons de penser que les opérateurs de décalage de bits >> (signé) et >>> (non signés) de Java fonctionneraient différemment? Je ne peux pas détecter de différence sur ma machine.Jamais des performances différentes entre les opérateurs Java >> et >>> right shift?

Ceci est une question purement académique; ça ne va jamais être le goulot d'étranglement, j'en suis sûr. Je sais: il vaut mieux écrire ce que vous voulez dire avant tout; utilisez >> pour la division par 2, par exemple. Je suppose qu'il revient à savoir quelles architectures ont les opérations implémentées en tant qu'instruction.

+0

Je pense que les deux seront convertis en instructions CPU natives (droite/arithmétique droite-décalage) qui prend finalement des cycles similaires. – kennytm

+4

Non, utilisez '/ 2' pour la division par 2. –

+1

+1 pour me faire rechercher l'opérateur >>>. Et ne sous-estimez pas l'optimisation du compilateur. Souvent, l'optimisation à ce niveau peut même empirer les choses. – Thirler

Répondre

3

n ° Votre compilateur les traduira en bytecode et la JVM interprétera le bytecode pour votre architecture. Je pense qu'il est sûr de supposer que votre architecture a un ensemble d'instructions qui comprend les deux opérations se faire dans quelques cycles d'horloge.

De toute façon, il y a une différence dans le comportement de ces opérateurs, donc ce n'est pas comme si vous pouviez simplement les échanger.

+0

@Tim Bender: +1 ... Dans le monde x86, * ">> 1" * puisque le P4 était seulement un cycle et que l'architecture P6 * ">> any" * est seulement un cycle AFAIK. – SyntaxT3rr0r

+0

Je pense que c'était ma question: est-ce que les architectures communes implémentent les deux comme instruction? Et oui comme je l'ai dit cela ne s'applique que dans les cas où le comportement est identique (entiers non négatifs). –