itLinkedInPocketCopyゲームのフラグ管理などで立っているビット位置を算出したい時があるかと思います。4と返したい普通に考えるとループでビットシフトしてビット演算してカウントする方法を思いつくと思います。Bit)の位置を高速に算出するアルゴリズム」を紹介しようと思います。使われる技術ビット列の最右端の1を残して残りを0にするビット演算long型のxという変数にビット列が入っているとします。);これでビット列のxの部分が0になった値がulong型の変数yに入ります。例(1)のビット列は0000(中略)00001000となります。6ビット単位で見たとき0~63が全て含まれる特殊な数値64ビットの「0x03F566ED27179461」という数値があります。0001」となります。この数値はM系列と呼ばれるもので、1ビットずつずらしながら6ビット単位で見ていった時に0~63の数値が順不同で含まれている特殊な数値です。左端から最初の6ビットを見ると000000、左端から最初の1ビットを除いて6ビットをみると000001となっていることが分かると思います。この上位6ビットをキーとして活用します。63(中略)完全ハッシュテーブルによるビットシフト数との関連付け「0x03F566ED27179461」の上位6ビットのパターンが表す数値とビットシフト数の対応表を用意しておきます。6(中略)コードで書くと以下のようになります。Bit)位置算出コード先に解説した技術を組み合わせると実際のコードは以下のようになります。];}最初のif判定は立っているビットが無い(引数が0のとき)を除外するためにあります。xxxx(中略)xxxxxxx1の時も0を返すため、それと区別が出来なくなることを防いでいます。」に掛けることにより、yの立っているビット位置に応じて「0x03F566ED27179461UL」が左にビットシフトされた数値になります。例(1)だとyは2進数で0000(中略)00001000なので、「0x03F566ED27179461UL」を左に3ビットシフトした数値が得られます。