モートン キーの計算

ゲームプログラミングのためのリアルタイム衝突判定を読んでると、こんなコードがあった。

// 入力のうち低い方の16ビットを1つのビットごとに分離する
uint32 Part1By1( uint32 )
{
    // n = ----------------fedcba9376543210 : 最初のビットの状態
    // n = --------fedcba98--------76543210 : (1)の後
    // n = ----fedc----ba98----7654----3210 : (2)の後
    // n = --fe--dc--ba--98--76--54--32--10 : (3)の後
    // n = -f-e-d-c-b-a-9-8-7-6-5-4-3-2-1-0 : (4)の後
    n = (n ^ (n << 8)) & 0x00ff00ff; // (1)
    n = (n ^ (n << 4)) & 0x0f0f0f0f; // (2)
    n = (n ^ (n << 2)) & 0x33333333; // (3)
    n = (n ^ (n << 1)) & 0x55555555; // (4)
    return n;
}

すげぇ( ̄□ ̄;)!!