私は基本的にコンピューターサイエンスの初心者です。初歩的な質問でしたらご容赦ください。基数ソートを理解しようとしています。32 ビット符号なし整数は 4 つの 8 ビット チャンクに分解できると読みました。その後、基数ソートを完了するのに必要なのは「4回のパス」だけです。この内訳 (32 ビットを 4 つの 8 ビット チャンクに分割) がどのように機能するかの例を教えてください。たぶん、2147507648 のような 32 ビット整数です。
ありがとう!
私は基本的にコンピューターサイエンスの初心者です。初歩的な質問でしたらご容赦ください。基数ソートを理解しようとしています。32 ビット符号なし整数は 4 つの 8 ビット チャンクに分解できると読みました。その後、基数ソートを完了するのに必要なのは「4回のパス」だけです。この内訳 (32 ビットを 4 つの 8 ビット チャンクに分割) がどのように機能するかの例を教えてください。たぶん、2147507648 のような 32 ビット整数です。
ありがとう!
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 です。
それは次のように行われます:
2147507648
=> 0x80005DC0 (hex value of 2147507648)
=> 0x80 0x00 0x5D 0xC0
=> 128 0 93 192
これを行うには、nos が示唆するようにビット単位の操作が必要です。