どこかで拾ってきた処理だとは思うが、いつか使うかもしれないのでメモ
こちらのページにて解説してる人がいたので、詳細はこちらから
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 }