Разделить int на основе не степени двух - PullRequest
0 голосов
/ 17 июня 2009

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

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

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

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

Ответы [ 3 ]

1 голос
/ 17 июня 2009

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

rightDigits = number % 2704 // 52 squared
leftDigits = number / 2704
1 голос
/ 17 июня 2009

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

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

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

1 голос
/ 17 июня 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...