>
>
>
V3182. The result of '&' operator is al…


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;

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

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