Radix Сортировать C ++ Не маскирующие биты
-
09-12-2019 - |
Вопрос
У меня есть очередь и и массив очередей.buckets
- это массив и collector
- это очередь.pass
- это целое число, которое сохраняет, что проходит.У меня есть метод, который возвращается мне, содержит первую ячейку очереди, называемую peek()
.shiftOne()
- это метод, который перемещает голову одной очереди на хвост другого.
Теперь этот код не работает для меня
bucket[((collector.peek()>>(pass * 8)) &0xFF)].shiftOne(collector);
.
Я пошел пошаговый шаг, и оказалось неправильно, я не замаскирую биты.Я могу сдвинуть их, но это об этом.Поэтому я постараюсь получить доступ к элементу 102 для 10-элементного массива.Что я делаю неправильно?Я знаю peek()
и shiftOne()
, потому что я могу отсортировать с помощью держав и модулей.
Решение
You're confusing radix-10 with radix-2.
Bit shifting is division by 2, so for example: 102 >> 1
= 102 / 2
= 51.
Similarly: 102 >> 8
= 102 / 2^8
= 102 / 256
= 0 (in int
terms).
The code (i >> 8) & 0xFF
for example is used to extract the content of the second byte of the given i
value.
For your case - stick with divisions by 10 with modulus.