按位检查标志是否存在

时间:2011-10-19 02:05:37

标签: language-agnostic bit-manipulation flags

是否有一种方法通常用于检查int / other数据类型中是否存在标志?我想出了类似的东西:

if ((host&flagtocheckfor)==flagtocheckfor)

哪种工作正常 - 但是这种常见的设置标志的方法是通常检查标志的方式吗?还是有更简洁的方法?

1 个答案:

答案 0 :(得分:29)

在大多数支持它们的语言中检查位标志的方式非常好

例如:

#define BIT_7 0x80
#define BITS_0_AND_1 0x03

if ((flag & BIT_7) == BIT_7) ...
if ((flag & BITS_0_AND_1) == BITS_0_AND_1) ...

虽然您可以通过以下方式检查第一个内容:

if ((flag & BIT_7) != 0) ...

对于第二个实际上不起作用,因为如果设置了 位,它将返回true,而不是两者。

为了完整性,C允许您使用以下命令设置位掩码:

flag = flag | BIT_7;   // or you can also use 'flag |= BIT_7'

您可以使用以下方式清除它们:

flag = flag & (~BIT_7);

并用以下方式切换:

flag = flag ^ BIT_7;