Compartilhar via


C6317

aviso C6317: Operador incorreto: não lógico (!) não é intercambiável com complemento (~)

Esse aviso indica que um lógico - não!() é aplicado a uma constante que é provavelmente um sinalizador de bit.O resultado de lógico - não é booleana; está incorreto aplicar bit a bit e o operador de&() com um valor booliano.Use o operador de complemento~(-) para inverter sinalizadores.

Exemplo

O código a seguir gera este aviso:

#define FLAGS   0x4004

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

Para corrigir esse aviso, use o seguinte código:

#define FLAGS   0x4004

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

Consulte também

Referência

Operador AND bit a bit: &

Operador de negação lógica: !

Operador de complemento individual: ~