﻿# 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:

```cpp
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:

```cpp
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'\.