これは私が現在取り組んでいる宿題の問題です。渡された32ビットintxを調べて、その値を2秒補数に格納するために必要な最小ビットを返す必要があります。
例えば:
howManyBits(0) = 1;
howManyBits(-1) = 1;
howManyBits(7) = 4;
howManyBits(-10) = 5;
問題は、これを見つけるためにビット演算子しか使用できないこと、1バイトを超える定数を使用できないこと、および合計で90を超える操作を使用できないことです。現時点では、最上位ビットから1をビットスミアすることができます。その後、その中で1ごとにカウントします。ただし、これは32ビットintであり、ビットがオンになっていることを確認するたびにintを1から右にシフトする必要があるため、ビットをカウントアップするプロセスは、それ自体で90回の操作を必要とします。ビットスミアリングには20がかかりましたが、最大操作をはるかに超えています。
また、私は自分のソリューションで条件文やループを使用することを声に出して言っていません。
私はそれを解決できるlog_2アルゴリズムを理解できれば知っていますが、ビット演算子だけでもそれを理解することはできませんでした。
私が欲しいのは、実際のコードソリューションではなく、より少ない操作でそれを行うプロセスのヒント/説明です。ありがとう!