Разделить int на основе не степени двух
-
06-07-2019 - |
Вопрос
Я знаю, что вы можете разделить число на две степени пополам следующим образом:
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)
Это основа для базового расчета. Вы также можете получить решение из алгоритма, который отображает число в определенной базе: как вы получаете две крайние правые цифры и две крайние левые цифры.