C6317

avviso C6317: operatore errato: l'operatore NOT logico (!) non è interscambiabile con l'operatore di complemento a uno (~)

L'avviso indica che un operatore NOT logico (!) è stato applicato a una costante che è probabilmente un flag di bit.Il risultato del NOT logico è un valore booleano. Non è corretto applicare l'operatore AND bit per bit (&) a un valore booleano.Per invertire i flag, utilizzare l'operatore di complemento a uno (~).

Esempio

Il codice seguente genera questo avviso:

#define FLAGS   0x4004

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

Per risolvere il problema, utilizzare il codice seguente:

#define FLAGS   0x4004

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

Vedere anche

Riferimenti

Operatore AND bit per bit: &

Operatore di negazione logica: !

L'operatore di complemento a uno: ~