如何解决检测是否设置了位在编译时
| 如何检测位置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 };
};
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。