Сплит int-of-two based int

Я знаю, что вы можете разделить число «два-два» пополам:

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

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

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

math,bit-manipulation,

0

Ответов: 3


1 принят

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

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

1

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


1

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

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

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

математика, бит манипуляции,
Похожие вопросы
Яндекс.Метрика