我基本上是计算机科学的初学者。如果我问基本问题,请原谅我。我想了解基数排序。我读到一个 32 位无符号整数可以分解为 4 个 8 位块。之后,只需要“4遍”即可完成基数排序。有人可以给我看一个例子,说明这个分解(32 位到 4 个 8 位块)是如何工作的?也许,一个 32 位整数,如 2147507648。
谢谢!
我基本上是计算机科学的初学者。如果我问基本问题,请原谅我。我想了解基数排序。我读到一个 32 位无符号整数可以分解为 4 个 8 位块。之后,只需要“4遍”即可完成基数排序。有人可以给我看一个例子,说明这个分解(32 位到 4 个 8 位块)是如何工作的?也许,一个 32 位整数,如 2147507648。
谢谢!
您可以将 32 位整数分成 4 段,每段 8 位。提取这些片段是使用 C 中可用的一些运算符的问题:
uint32_t x = 2147507648;
uint8_t chunk1 = x & 0x000000ff; //lower 8 bits
uint8_t chunk2 = (x & 0x0000ff00) >> 8;
uint8_t chunk3 = (x & 0x00ff0000) >> 16;
uint8_t chunk4 = (x & 0xff000000) >> 24; //highest 8 bits
2147507648 十进制是 0x80005DC0 十六进制。您非常关注十六进制表示中的这 8 位,因为每个十六进制数字代表 4 位,其中两个和两个代表 8 位。
所以现在意味着块 1 是 0xC0,块 2 是 0x5D,块 3 是 0x00,块 4 是 0x80
它的完成如下:
2147507648
=> 0x80005DC0 (hex value of 2147507648)
=> 0x80 0x00 0x5D 0xC0
=> 128 0 93 192
为此,您需要按照 nos 的建议进行按位运算。