检测是否设置了位(在编译时)

| 如何检测位置n的位是否设置为常数?     
已邀请:
template<std::uint64_t N, std::uint8_t Bit>
struct is_bit_set
{
    static bool const value = !!(N & 1u << Bit);
};
“ 1”用于将值强制转换为“ 2”,并避免数据截断编译器警告。     
int const a = 4;
int const bitset = !!((1 << 2) & a);
现在,
bitset
1
。例如,如果您存储
3
,则为
0
。是的,
a
是一个变量。     
与用户ildjarn的建议相同,但是使用所谓的“枚举”保证了编译器将在编译时进行所有计算:
template<std::uint64_t N, std::uint8_t Bit>
struct is_bit_set
{
    enum { value = ( N & (1u << Bit) ) != 0 };
};
    

要回复问题请先登录注册