モートン キーの計算
ゲームプログラミングのためのリアルタイム衝突判定を読んでると、こんなコードがあった。
// 入力のうち低い方の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; }
すげぇ( ̄□ ̄;)!!