C6317

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

请参见

参考

Bitwise AND Operator: &

Logical Negation Operator: !

One's Complement Operator: ~