# V6120. The result of the '&' 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.

Look at an example:

    public class TypeAttribute {
      private static final int NOT_PUBLIC = 0x0,
      private static final int PUBLIC = 0x1,
      private static final int NESTED_PUBLIC = 0x2,
      private static final int NESTED_PRIVATE = 0x3

      public static boolean isNotPublic(int type) {
        return (type & NOT_PUBLIC) == NOT_PUBLIC;
      }
    }

The 'isNotPublic' method checks if the argument has the 'NOT_PUBLIC' flag.

Such a check makes no sense since the 'NOT_PUBLIC' 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 boolean isNotPublic(int type) {
      return type == NOT_PUBLIC;
    }

The analyzer also issues a warning if an operand equal to '0' is used with the '&=' operator. Such code 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