按位和检查平等

时间:2015-09-23 01:57:15

标签: c# boolean-logic

如果您有一个名为[Flags]的{​​{1}}枚举实例,并且想要查看它是否等于clientType,那么有没有任何意义呢?

typeToAdjust

这不是一样的吗?:

 (clientType & (int)typeToAdjust) == (int)typeToAdjust

4 个答案:

答案 0 :(得分:1)

如果您在clientType中设置了多个标志,那么您必须执行第一个标记,尽管您也可以这样做:

(clientType & (int)typeToAdjust) != 0 

你似乎错过了[Flags]的整个想法,它允许设置一个或多个位。

答案 1 :(得分:0)

是的,但是有一个标志枚举的意义是你可以将它们组合起来

   typeToAdjust = type1 
   clientType = type1 | type2
   (clientType & (int)typeToAdjust) == (int)typeToAdjust // true
   clientType == (int)typeToAdjust // false

答案 2 :(得分:0)

这两个陈述是不同的,但第二个是实际测试相等的陈述。如果clientType具有typeToAdjust中设置的位的超集,那么第一个表达式将评估为true,因为(clientType & (int)typeToAdjust)仅评估为typeToAdjust。通过超集,我的意思是typetoAdjust中设置的所有位都设置在clientType中,但也可能是一些额外的位。

答案 3 :(得分:0)

(clientType&(int)typeToAdjust)==(int)typeToAdjust

和 clientType ==(int)typeToAdjust

不一样

取clientType = 3和typeToAdjust = 1

clientType& (int)typeToAdjust = 1 = typeToAdjust 但clientType!=(int)typeToAdjust