Вопрос

У меня есть очередь и и массив очередей.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.

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