2

我正在尝试检查标志值中的一些标志可以|'d在一起。到目前为止,我正在使用这个

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

检查它是真是假,但有没有更“优雅”的方式来做到这一点?

4

3 回答 3

2

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

if (someclass.flags & CONST_SOMEFLAG) ...

于 2013-06-01T12:16:11.697 回答
0

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

if( someclass.flags & CONST_SOMEFLAG )
于 2013-06-01T12:16:48.477 回答
0

这会很好,但使用 & 更传统:

if (flags & MASK) . . .

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

于 2013-06-01T12:19:00.267 回答