うにてぃブログ

主にUnityとC#に関する記事を書いていきます

【C#】2進数の1の数をカウントする

どこかで拾ってきた処理だとは思うが、いつか使うかもしれないのでメモ

こちらのページにて解説してる人がいたので、詳細はこちらから
intの1のビットの数を数えるロジック | mwSoft

public static int GetBitCount(int x)
{
    x = (x & 0x55555555) + ((x >> 1) & 0x55555555);
    x = (x & 0x33333333) + ((x >> 2) & 0x33333333);
    x = (x & 0x0F0F0F0F) + ((x >> 4) & 0x0F0F0F0F);
    x = (x & 0x00FF00FF) + ((x >> 8) & 0x00FF00FF);
    x = (x & 0x0000FFFF) + ((x >> 16) & 0x0000FFFF);
    return x;
}

小さい値のみですがこんな結果が出ます

    void Start()
    {
        Debug.Log(GetBitCount(1)); // 1
        Debug.Log(GetBitCount(2)); // 1
        Debug.Log(GetBitCount(3)); // 2
        Debug.Log(GetBitCount(4)); // 1
        Debug.Log(GetBitCount(5)); // 2
    }