Language agnostic 按位检查是否存在标志
是否有一种方法通常用于检查int/other数据类型中是否存在标志?我想出了这样的办法:Language agnostic 按位检查是否存在标志,language-agnostic,bit-manipulation,flags,Language Agnostic,Bit Manipulation,Flags,是否有一种方法通常用于检查int/other数据类型中是否存在标志?我想出了这样的办法: if ((host&flagtocheckfor)==flagtocheckfor) 哪种方法可以很好地工作-但是它是设置标志的一种常见方法,这是通常检查标志的方式吗?或者有更简洁的方法吗?这正是大多数支持位标志的语言检查位标志的方式 例如: #define BIT_7 0x80 #define BITS_0_AND_1 0x03 if ((flag & BIT_7) == BIT_7)
if ((host&flagtocheckfor)==flagtocheckfor)
哪种方法可以很好地工作-但是它是设置标志的一种常见方法,这是通常检查标志的方式吗?或者有更简洁的方法吗?这正是大多数支持位标志的语言检查位标志的方式
例如:
#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;
并使用以下选项切换它们:
flag = flag & (~BIT_7);
flag = flag ^ BIT_7;
部件不需要==flagtocheckf。&的结果是0(位关闭)或非0(位打开),至少在C中,这已经对应于False和True。@librik,这对于单位掩码是可以的,但有些可能是多位掩码。看看我的答案。