2010-08-03 12 views
1

Comment puis-je implémenter les opérations rightrotate (et leftrotate) sur des entiers 32 bits sans utiliser d'opérations au niveau du bit? J'ai besoin de cela parce que le langage HLSL (High Level Shader Language) n'autorise pas les opérations sur bits au niveau des nombres, et j'ai besoin d'utiliser un shader spécifique que j'essaye de mettre en œuvre.rightrotate sans opérateurs bit à bit

+1

Que pouvez-vous utiliser? – NullUserException

+0

Opérations arithmétiques standard, entiers, entiers non signés, tableaux. Toutes les bases sauf les opérations bitwise vraiment – Martin

+0

Pourriez-vous s'il vous plaît donner un exemple? juste un peu? – AraK

Répondre

5

Pour les entiers non signés, divisez par 2 et ajoutez 2^32 si le nombre était impair, pour une rotation à droite. Pour gauche, multipliez par deux et ajoutez 1 s'il était supérieur à 2^32 - 1.

+0

Note: selon la langue, vous devrez peut-être gérer le débordement et l'arrondi. Par exemple. pour la gauche, vous devrez peut-être soustraire 2^32 avant de multiplier par 2. – sje397

+0

Si vous n'avez pas besoin de l'embout à enrouler, vous pouvez simplement diviser et multiplier par 2 pour tourner à droite et à gauche. – slebetman

+0

@slebetman: ce serait donc par définition un changement plutôt qu'une rotation, sûrement? –