Frage

Ich weiß, dass Sie eine Power-of-two-Nummer in der Hälfte wie so aufteilen:

halfintR = some32bitint & 0xFFFF
halfintL = some32bitint >> 16

Sie können das gleiche tun für eine ganze Zahl, die von einer Nicht-Zweierpotenz Raum begrenzt ist?

(sagen, dass Sie Ihren Bereich auf die Menge der ganzen Zahlen beschränkt sein, die in 4-stellige Basis 52 Platz unsigned passen)

War es hilfreich?

Lösung

Sie können die folgenden Befehle verwenden

rightDigits = number % 2704 // 52 squared
leftDigits = number / 2704

Andere Tipps

Nun, natürlich. & 0xffff ist die gleiche wie % 0x10000 und >> 16 die gleiche wie / 0x10000 ist. Es ist nur, dass die Division durch eine Potenz von zwei ist effizienter, wenn sie mit Bit-Operationen wie Verschieben und Maskierung durchgeführt. Abteilung arbeitet mit einer beliebigen Anzahl (im Bereich der Repräsentation).

Sobald Sie erkennen, dass die & und >> verwendet werden, für die jeweils modulo und division Berechnung zu tun, können Sie schreiben, was Sie wollen, wie:

lower = some4DigitsNumberBase52 % (52 * 52)
upper = some4DigitaNumberBase52 / (52 * 52)

Dies ist die Grundlage für die Basisberechnung zu tun. Sie können auch die Lösung aus dem Algorithmus ableiten, das eine Zahl in einer bestimmten Base zeigt:., Wie Sie mit den beiden rechten Ziffern und die zwei am weitesten links stehenden Ziffern kommen up

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top