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. |