# V3181. The result of '&' operator is '0' because one of the operands is '0'.

The analyzer has detected that there is a bitwise 'AND' (&) operation with an operand equal to 0. A code fragment may contain incorrect operator or operand.

Example:

    public enum TypeAttr
    {
      NotPublic = 0x0,
      Public = 0x1,
      NestedPublic = 0x2,
      NestedPrivate = 0x3
    }

    public static bool IsNotPublic(TypeAttr type)
    {
      return (type & TypeAttr.NotPublic) == TypeAttr.NotPublic;
    }

The 'IsNotPublic' method checks if the argument of the 'TypeAttr' type has the 'NotPublic' flag.

Such a method of checking doesn't have any practical sense since the 'TypeAttr.NotPublic' flag has a zero value, which means using this flag as an operand of the '&' operator always results in a zero value. Thus, in the presented implementation, we always get the true condition.

The correct implementation of the check may look as follows:

    public static bool IsNotPublic(TypeAttr type)
    {
      return type == TypeAttr.NotPublic;
    }

The analyzer will also issue a warning for the use of the operand that is '0' with the '&=' operator. This code also looks questionable, because if one of the operands is '0', the result of the expression is also '0'.

This diagnostic is classified as:

CWE-682

You can look at examples of errors detected by the V3181 diagnostic.