Поделиться через


C6317

Предупреждение C6317: неверный оператор. Логическое отрицание (!) не является взаимозаменяемым с дополнением до единицы (~).

Данное предупреждение состоит в том, что оператор логического НЕ (!) применяется к константе, которая, вероятно, является битовым флагом.Результат оператора логического НЕ принадлежит типу Boolean; неверно применять оператор побитового И (&) к значению типа Boolean.Для отражения флагов следует использовать оператор дополнения до единицы (~).

Пример

Данное предупреждение создается в следующем коде:

#define FLAGS   0x4004

void f(int i)
{
  if (i & !FLAGS) // warning
  { 
    // code
  }
}

Для устранения этого предупреждения используйте следующий код:

#define FLAGS   0x4004

void f(int i)
{
  if (i & ~FLAGS)
  {
    // code
  }
}

См. также

Ссылки

Побитовый ОПЕРАТОР and. &

Оператор логического отрицания. !

Один оператор дополнения. |