Radix Sort C ++ non mascheramento di bit
-
09-12-2019 - |
Domanda
Ho una coda e una serie di code.buckets
è l'array e collector
è la coda.pass
è un numero intero che salva che lo passa è.Ho un metodo che mi riporta le contiene la prima cella della coda chiamata peek()
.shiftOne()
è un metodo che sposta la testa di una coda sulla coda di un'altra.
Ora questo codice non funziona per me
bucket[((collector.peek()>>(pass * 8)) &0xFF)].shiftOne(collector);
.
Sono andato passo dopo passo e si scopre che non sto mascherando correttamente i bit.Posso spostarli ma questo è al riguardo.Quindi proverò ad accedere all'elemento 102 per un array di 10 elementi.Che cosa sto facendo di sbagliato?Conosco peek()
e shiftOne()
perché posso ordinare usando poteri e moduli.
Soluzione
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.