# V3182. The result of '&' operator is always '0'.

Анализатор обнаружил использование побитового 'AND' (&) с операндами, при которых результат операции всегда равен 0. Возможно, использован неподходящий оператор или операнд.

Рассмотрим пример:

    public enum FlagType : ulong
    {
      Package = 1 << 1,
      Import = 1 << 2,
      Namespace = 1 << 3,
      ....
    }
    ....
    FlagType bitMask = FlagType.Package & FlagType.Import;

Здесь 'bitMask' – объект типа перечисления 'FlagType', в котором создаётся битовая маска.

Подобный метод объединения флагов перечисления является некорректным. Побитовое 'AND' (&) между значениями 'FlagType.Package' и 'FlagType.Import' равно нулю, так как эти битовые флаги не содержат единиц в соответствующих разрядах.

Корректная реализация объединения флагов может выглядеть следующим образом:

    FlagType bitMask = FlagType.Package | FlagType.Import;

Данная диагностика классифицируется как:

CWE-480

Взгляните на примеры ошибок, обнаруженных с помощью диагностики V3182.