2009-06-08 6 views

Répondre

4

Cela serait appelé un bit de rotation et C# n'a pas un tel opérateur.

Voici un post intéressant: Is there a way to perform a circular bit shift in C#?

Notez que votre int32integer doit être de type uint (unsigned int). Je crois que la rotation de bit est une instruction dans le jeu d'instructions d'Intel mais pour autant que je sache que le CLR n'a pas d'instructions de rotation de bit.

+0

En effet, selon http://en.csharp-online.net/CIL_Instruction_Set alors qu'il y a trois instructions de bitshift dans le CIL, il n'y a pas d'instructions de rotation. Ce qui est logique, car aucun langage de programmation (sans assemblage) dont je suis au courant n'a des opérateurs de rotation, alors pourquoi CIL devrait-il supporter cela? – David

0

Il n'y a pas d'opérateur primitif en C# pour faire ce que vous cherchez.

En ignorant les implications en termes de performances d'un appel de méthode (si vous faites des opérations de bitshift, cela pourrait vous intéresser), ce serait un bon candidat pour une méthode d'extension sur Int32.

1

Cela s'appelle une rotation de bits. D'autres langues l'ont, mais pas C#. Voir this question pour un peu plus de détails, mais l'essentiel est que votre approche actuelle est à peu près aussi bonne que vous pouvez le faire.

0

Je ne pense pas qu'il existe pour C#. Voir cette page pour la liste des opérateurs C#: http://msdn.microsoft.com/en-us/library/6a71f45d(vs.71).aspx.

Je pense que la façon dont vous avez montré dans votre question est probablement le moyen le plus rapide de le faire. Je pense que Java peut avoir un opérateur de décalage comme celui que vous recherchez, mais n'étant pas un programmeur Java, je ne peux pas le confirmer.

+0

Je vois quelqu'un d'autre répondre m'a battu à elle. –

Questions connexes