警告 C6317:运算符不正确: 逻辑非(!)与 1 的补数(~)不可互换
此警告意味着逻辑非 (!) 应用于可能是位标志的常数。逻辑非的结果是布尔值;将按位与 (&) 运算符应用于布尔值是不正确的。请使用按位求补 (~) 运算符来翻转标志。
示例
下面的代码生成此警告:
#define FLAGS   0x4004
void f(int i)
{
  if (i & !FLAGS) // warning
  { 
    // code
  }
}
若要更正此警告,请使用下面的代码:
#define FLAGS   0x4004
void f(int i)
{
  if (i & ~FLAGS)
  {
    // code
  }
}