如何检测位置 n 的位是否设置在常量变量中?
问问题
159 次
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);
现在,bitset
是1
。例如,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 回答