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é)

Était-ce utile?

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?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top