基数排序 C++ 不屏蔽位
-
09-12-2019 - |
题
我有一个队列和一个队列数组。 buckets
是数组并且 collector
是队列。 pass
是一个整数,保存了它所在的通道。我有一个方法可以返回队列第一个单元格的内容,称为 peek()
. shiftOne()
是一种将一个队列的头部移动到另一个队列的尾部的方法。
现在这段代码对我不起作用
bucket[((collector.peek()>>(pass * 8)) &0xFF)].shiftOne(collector);
我一步一步走来,结果发现我没有正确屏蔽这些位。我可以改变它们,但仅此而已。因此,我将尝试访问 10 元素数组的元素 102。我究竟做错了什么?我知道 peek()
和 shiftOne()
因为我可以使用幂和模进行排序。
解决方案
您将 radix-10 与 radix-2 混淆了。
位移位除以 2,例如: 102 >> 1
= 102 / 2
= 51.
相似地: 102 >> 8
= 102 / 2^8
= 102 / 256
= 0(在 int
条款)。
代码 (i >> 8) & 0xFF
例如用于提取内容 第二个字节 给定的 i
价值。
对于你的情况 - 坚持用模数除以 10。
不隶属于 StackOverflow