フラグ(0x00010001)をビット単位で整数と比較し、整数の両方のビットが設定されているかどうかを確認する最も効率的な方法は何ですか?
言い換えれば、以下を実行するための最も効率的な方法は何ですか?
bit = (number & 0x001 ) & (number 0x 0x00010000 )
フラグ(0x00010001)をビット単位で整数と比較し、整数の両方のビットが設定されているかどうかを確認する最も効率的な方法は何ですか?
言い換えれば、以下を実行するための最も効率的な方法は何ですか?
bit = (number & 0x001 ) & (number 0x 0x00010000 )
同時にテストしたい任意の数のビットに拡張可能な簡潔なソリューション:
!(~number & 0x00010001)
のすべてのビットnumber
をビット単位のNOTで反転します。両方のビットが設定されている場合、両方のビットは0になり&
、マスクとのビット単位のANDは0になります。0に論理NOTを適用すると、ゼロ以外の整数が返されます。
いずれかのビットが0の場合、ビットを反転すると1になります。したがって、ビット単位のANDの後の結果はゼロ以外になり、ゼロ以外の整数の論理NOTは0を返します。
私は一緒に行きます
(number & 0x00010001) == 0x00010001
number
これは、の両方のビットが設定されている場合にのみ当てはまります。