2012-03-09 97 views
0

我有一個隊列和一個隊列數組。 buckets是數組,而collector是隊列。 pass是一個整數,用於保存它傳遞的值。我有一個方法返回給我的隊列中第一個單元格的名稱爲peek()shiftOne()是一種將一個隊列的頭部移動到另一個隊列的尾部的方法。基數排序C++不屏蔽位

現在這個代碼不爲我工作

bucket[((collector.peek()>>(pass * 8)) &0xFF)].shiftOne(collector); 

我已經一步一步,它變成我沒有正確屏蔽位。我可以轉移他們,但這是關於它。所以我會嘗試訪問元素102的10元素數組。我究竟做錯了什麼?我知道peek()shiftOne(),因爲我可以使用權力和模數進行排序。

+1

'8'和'0xFF'使用基數-256排序,在這種情況下,你的數組應該是256個元素(訪問元素102就好) – 2012-03-10 01:49:00

回答

2

你正在混淆radix-10和radix-2。

比特移位是除以2,因此,例如:102 >> 1 = 102/2 = 51
類似地:102 >> 8 = 102/2^8 = 102/256 = 0(在int術語)。

例如代碼(i >> 8) & 0xFF用於提取給定i值的第二個字節的內容

對於你的情況 - 堅持與模數10分割。

+1

實際上他看起來像是混淆基數爲256的基數-10,因爲他每次移動8位。 – 2012-03-10 01:47:38