Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Language agnostic 按位检查是否存在标志_Language Agnostic_Bit Manipulation_Flags - Fatal编程技术网

Language agnostic 按位检查是否存在标志

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)

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

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,这对于单位掩码是可以的,但有些可能是多位掩码。看看我的答案。