是否有一种方法通常用于检查int / other数据类型中是否存在标志?我想出了类似的东西:
if ((host&flagtocheckfor)==flagtocheckfor)
哪种工作正常 - 但是这种常见的设置标志的方法是通常检查标志的方式吗?还是有更简洁的方法?
答案 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;