我正在尝试在标志值中检查一下哪些标志可以在一起。到目前为止我正在使用这个
if ((someclass.flags | CONST_SOMEFLAG) == someclass.flags)
检查它的真或假,但是有更“优雅”的方式吗?
答案 0 :(得分:2)
使用按位OR设置标志,使用按位AND进行测试,如下所示:
if (someclass.flags & CONST_SOMEFLAG) ...
答案 1 :(得分:0)
您想知道的是,如果在所有其他可能设置或未设置的位中设置了标志位。执行此操作的规范方法是按位和(&)测试非零
if( someclass.flags & CONST_SOMEFLAG )
答案 2 :(得分:0)
这样可以正常使用,但使用&amp ;:
更常规if (flags & MASK) . . .
这可能是因为在某些处理器上测试寄存器!= 0比使用存储值测试相等性更快。