如何检测位置n的位是否设置为常量变量?
答案 0 :(得分:6)
template<std::uint64_t N, std::uint8_t Bit>
struct is_bit_set
{
static bool const value = !!(N & 1u << Bit);
};
!!
用于简洁地将值强制转换为bool
并避免数据截断编译器警告。
答案 1 :(得分:4)
int const a = 4;
int const bitset = !!((1 << 2) & a);
现在,bitset
为1
。如果您存储0
,则为3
。是的,a
是变量。
答案 2 :(得分:2)
与user ildjarn中的his answer相同,但所谓的"enum trick"可以保证编译器在编译时完成所有计算:
template<std::uint64_t N, std::uint8_t Bit>
struct is_bit_set
{
enum { value = ( N & (1u << Bit) ) != 0 };
};