gpt4 book ai didi

c++ - 如何检查位枚举中是否存在值?

转载 作者:行者123 更新时间:2023-11-30 03:20:39 25 4
gpt4 key购买 nike

我有一个 enum :

enum Rule
{
BIT_NONE,
BIT_ONE,
BIT_TWO = 1 << 1,
BIT_THREE = 1 << 2,
BIT_FOUR = 1 << 3
};

现在,我如何验证特定的 int值属于上面的enum ?请注意,这个想法还允许 BIT_TWO 的任意组合, BIT_THREE , 和 BIT_FOUR , 因此有效值为 {0, 1, 2, 4, 6, 8, 10, 12, 14} .

如果我检查 BIT_NONE <= val && val <= BIT_FOUR , 它不允许上述组合,但也会包括不需要的 {3, 5, 7} .

我怎样才能做到这一点?

最佳答案

这需要一些位操作技巧:

要允许所有 enum 作为一个位,您需要确保它小于 BIT_FOUR,并且它只是一个位。后者可以通过!((val-1)&val)检测到:

bool is_allowed_single(unsigned val) {
return BIT_NONE <= val && val <= BIT_FOUR && !((val-1)&val);
}

那么某些位的组合也是有效的:

bool is_allowed_combination(unsigned val) {
return !(val & ~(BIT_TWO|BIT_THREE|BIT_FOUR));
}

最后,我们得到:

bool is_allowed(unsigned val) {
return is_allowed_single(val) || is_allowed_combination(val);
}

关于c++ - 如何检查位枚举中是否存在值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52714073/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com