2012-03-09 61 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