Condividi tramite


C6317

Aggiornamento: novembre 2007

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

Bitwise AND Operator: &

Logical Negation Operator: !

One's Complement Operator: ~