Diviser un int basé sur une puissance de deux
-
06-07-2019 - |
Question
Je sais que vous pouvez diviser un nombre de puissance de deux en deux comme suit:
halfintR = some32bitint & 0xFFFF
halfintL = some32bitint >> 16
pouvez-vous faire la même chose pour un entier qui est limité par une non-puissance de deux espaces?
(dites que vous voulez que votre étendue soit limitée à l'ensemble des entiers qui vont tenir dans un espace de base à 4 chiffres 52 non signé)
La solution
Vous pouvez utiliser les éléments suivants
rightDigits = number % 2704 // 52 squared
leftDigits = number / 2704
Autres conseils
Bien sûr. & amp; 0xffff
est identique à % 0x10000
et à > > 16
est identique à / 0x10000
. C'est simplement que la division par deux est plus efficace lorsqu'elle est effectuée avec des opérations de bits telles que le décalage et le masquage. La division travaille avec n’importe quel nombre (dans la plage de représentation).
Une fois que vous vous rendez compte que les codes & amp;
et > >
sont utilisés pour effectuer modulo
et division
. calcul, vous pouvez écrire ce que vous voulez comme:
lower = some4DigitsNumberBase52 % (52 * 52)
upper = some4DigitaNumberBase52 / (52 * 52)
C’est la base pour le calcul de base. Vous pouvez également déduire la solution de l’algorithme qui affiche un nombre dans une base spécifique: comment obtenez-vous les deux chiffres les plus à droite et les 2 chiffres les plus à gauche?