::があり、以下のように些細な計算をした:は、STDの2の補数を取得するための些細な方法は、私は私のプログラムで<code>std::bitset<N></code>を使用して、最下位セットビットを見つけるために必要だったビットセット<N>
int num = 5;
int res = num & (-num);
num
の最下位ビットはres
に設定され、残りはすべて0
です。これは、-5
が2の補数表記で表されているため動作します。
しかし、std::bitset<N>
には単項演算子のオーバーロードがありませんoperator -
これは基本ビットの2の補数を与えていました。 std::bitset<N>
と2の補数を実装するための些細な方法はありますか?私はいつもoperator ~
を使用してビットを反転させ、合計を実行してLSBからMSBまでのキャリーを実行することができましたが、私はこれを回避する解決策を探していました。
確かに、ほとんど何もすることの**非自明**の方法があります! – rodrigo
私は__trivial__を使っていたはずです:-pタイトルを編集します。 – vvnraman
フリップされたビットセットをループすることは、最下位ビットを見つけるために元のビットセットを単にループさせることと同じくらい速くなる可能性が高いことに注意してください(この場合、私は些細な解決策を見つけることができます。) – Zeta