2017-09-17 7 views
-3

forループまたはwhileループを使用せずに、0xFFより大きい定数を使用せずに、Cの32ビット整数xの1の数を数える最も良い方法は何ですか?整数の1の数を数えるC

私が考えたのは、x24を右にシフトし、シフトされた整数に何個の1を数え、それを変数カウントで格納するかです。次に、x 16を右にシフトし、シフトされた整数の1の数だけカウントを増やします。

ので、よりよい解決策の任意のアイデア?

+0

コードが重くすなわちポータブルでない、実装定義された動作に依存しています。また、<25ビットの 'int'を持つプラットフォームでは、あまりにも大きなシフトカウントに対して未定義の動作を呼び出すことができます。符号付き整数のシフトも問題です。サインビットが含まれていないことを保証できない限り、避けてください(つまり、これを回避するだけです)。 – Olaf

+0

1の数によると、数値または基数のバイナリ表現を意味します。 – Mitchel0022

+0

バイナリ表現の数は –

答えて

1

すべてのdビット数に1の数を表にすることができます。これは、各値d<255)を超えない、2^dエントリのテーブルを取ります。

今度は、dビットのスライスで番号を切り取り、すべてのスライスの数を調べることができます。

スペース/操作数の妥協点はおそらくd=48スライス、テーブルサイズ= 16)です。

+0

これは必ずしも良いとは限りませんが、悪化します。 – Olaf

+0

@Olaf:どういうことですか? –

+0

ほとんどあなたが書いたことについて私は言うだろう。 – Olaf