/ /ビット演算子を使用して数値が2のべき乗かどうかを調べる[O(1)] - バイト、ビット操作、ビット、ビット演算子

Bitwise Operators [O(1)] - バイト、ビット操作、ビット、ビット演算子を使用して、数値が2の累乗であるかどうかを調べる

ちょっと私は簡単な質問があります:

intがaであるかどうかを調べるにはどうすればよいですか 2のべき乗 ビットワイズ演算子を使用して(正の1ビットのみ)、 O(1) 何もせずに IF 文またはその他のタイプの ブーリアン 表現?

メソッドは整数値を返す必要があります。

メソッドは特定の数を返すことができそれは2のべき乗を意味し、2のべき乗ではないことを意味する別の数値を意味します。

また あなたはintが32ビットを持っているという事実に頼ることはできません。

これは私がインタビューで尋ねられた質問です。

回答:

回答№1は4

減算が受け入れられるならば、あなたはただ使うことができます x & (x - 1)これは2のべき乗に対して0を与え、そうでなければ> 0を与えます。それが純粋にビット単位の解決策である必要があるなら、あなたはそれを実装する必要があるでしょう - 1 2の補数算術の通常の方法でビット演算子を使って。