检查位标志

时间:2013-06-01 12:13:37

标签: c++

我正在尝试在标志值中检查一下哪些标志可以在一起。到目前为止我正在使用这个

 if ((someclass.flags | CONST_SOMEFLAG) == someclass.flags)

检查它的真或假,但是有更“优雅”的方式吗?

3 个答案:

答案 0 :(得分:2)

使用按位OR设置标志,使用按位AND进行测试,如下所示:

if (someclass.flags & CONST_SOMEFLAG) ...

答案 1 :(得分:0)

您想知道的是,如果在所有其他可能设置或未设置的位中设置了标志位。执行此操作的规范方法是按位和(&)测试非零

if( someclass.flags & CONST_SOMEFLAG )

答案 2 :(得分:0)

这样可以正常使用,但使用&amp ;:

更常规
if (flags & MASK) . . .

这可能是因为在某些处理器上测试寄存器!= 0比使用存储值测试相等性更快。