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