3

位置nのビットが定数変数に設定されているかどうかを検出するにはどうすればよいですか?

4

3 に答える 3

6
template<std::uint64_t N, std::uint8_t Bit>
struct is_bit_set
{
    static bool const value = !!(N & 1u << Bit);
};

!!値をaに簡潔に強制し、boolデータ切り捨てコンパイラの警告を回避するために使用されます。

于 2011-04-15T11:35:04.613 に答える
4
int const a = 4;
int const bitset = !!((1 << 2) & a);

さて、bitsetです10たとえば、を保存した場合です3。はい、a変数です

于 2011-04-15T11:34:33.360 に答える
2

ユーザーildjarnが彼の答えで示唆しているのと同じことですが、コンパイラーがコンパイル時にすべての計算を行うことを保証する、いわゆる「列挙型トリック」を使用します。

template<std::uint64_t N, std::uint8_t Bit>
struct is_bit_set
{
    enum { value = ( N & (1u << Bit) ) != 0 };
};
于 2011-04-15T11:50:23.077 に答える