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);
};

!!用于简洁地将值强制转换为 abool并避免数据截断编译器警告。

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

现在,bitset1。例如,0如果您存储了一个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 回答