按位与检查相等性

Bitwise AND To Check Equality

如果您有一个名为 typeToAdjust[Flags] 枚举实例,并且您想查看它是否等于 clientType,这样做有什么意义吗?

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

这不也是一样吗?:

clientType == (int)typeToAdjust

是的,但是拥有标志枚举的目的是让您可以将它们组合起来

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

这两个语句是不同的,但第二个是实际测试相等性的语句。如果 clientType 具有 typeToAdjust 中设置的位的超集,则第一个表达式的计算结果为真,因为 (clientType & (int)typeToAdjust) 仅计算为 typeToAdjust。通过超集,我的意思是 typetoAdjust 中设置的所有位都在 clientType 中设置,但可能还有一些额外的位。

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

(clientType & (int)typeToAdjust) != 0 

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

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

和 clientType == (int)typeToAdjust

不一样

取 ​​clientType = 3 和 typeToAdjust = 1

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