基数ソートC ++マスキングビットをマスキングしません
-
09-12-2019 - |
質問
私はキューとキューの配列を持っています。buckets
はアレイとcollector
がキューです。pass
は、それがどちらかを保存する整数です。peek()
というキューの最初のセルのCONTSULEのCONTINSEを私に戻すメソッドがあります。shiftOne()
は、1つのキューの先頭を別のキューの尾に移動させる方法です。
今このコードは私には機能しません
bucket[((collector.peek()>>(pass * 8)) &0xFF)].shiftOne(collector);
.
ステップバイステップで降りてきました。ビットを正しくマスキングしていません。私はそれらをシフトすることができますが、それはそれについてです。そのため、10要素配列の要素102にアクセスしようとします。私は何が悪いのですか?PowersとMostulusを使用してソートできるため、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.
所属していません StackOverflow