0

私は基本的にコンピューターサイエンスの初心者です。初歩的な質問でしたらご容赦ください。基数ソートを理解しようとしています。32 ビット符号なし整数は 4 つの 8 ビット チャンクに分解できると読みました。その後、基数ソートを完了するのに必要なのは「4回のパス」だけです。この内訳 (32 ビットを 4 つの 8 ビット チャンクに分割) がどのように機能するかの例を教えてください。たぶん、2147507648 のような 32 ビット整数です。

ありがとう!

4

2 に答える 2

2

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 10 進数は 0x80005DC0 16 進数です。各 16 進数は 4 ビットを表し、そのうちの 2 つと 2 つが 8 ビットを表すため、16 進数表現のうちこれらの 8 ビットにかなり注目しています。

つまり、チャンク 1 は 0xC0、チャンク 2 は 0x5D、チャンク 3 は 0x00、チャンク 4 は 0x80 です。

于 2013-10-15T08:22:28.363 に答える
1

それは次のように行われます:

   2147507648
=> 0x80005DC0 (hex value of 2147507648)
=> 0x80 0x00 0x5D 0xC0
=> 128  0    93   192

これを行うには、nos が示唆するようにビット単位の操作が必要です。

于 2013-10-15T08:22:10.567 に答える