Вопрос

Я знаю, что вы можете разделить число на две степени пополам следующим образом:

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

можете ли вы сделать то же самое для целого числа, которое ограничено не степенью двойки?

(скажем, вы хотите, чтобы ваш диапазон был ограничен набором целых чисел, которые будут помещаться в 4-значное без знака в 52 знака)

Это было полезно?

Решение

Вы можете использовать следующее

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

Другие советы

Ну конечно. <Код> & амп; 0xffff совпадает с % 0x10000 и > > 16 совпадает с / 0x10000 . Просто деление на степень двойки более эффективно, когда выполняется с помощью битовых операций, таких как сдвиг и маскирование. Отдел работает с любым числом (в пределах диапазона представления).

Как только вы поймете, что & amp; и > > используются для выполнения modulo und Division Расчет соответственно, вы можете написать, что вы хотите, как:

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

Это основа для базового расчета. Вы также можете получить решение из алгоритма, который отображает число в определенной базе: как вы получаете две крайние правые цифры и две крайние левые цифры.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top