C6317

警告 C6317: 不適切な演算子です: 論理否定演算子は 1 の補数演算子 (~) と代替できません

この警告は、論理 NOT (!) が、ビット フラグとなる可能性のある定数に適用されていることを示しています。 論理 NOT の結果はブール値です。ビット単位の AND (&) 演算子をブール値に適用するのは正しくありません。 フラグを反転するには、1 の補数 (~) 演算子を使用します。

この警告が発生するコード例を次に示します。

#define FLAGS   0x4004

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

この警告を解決するには、次のコードを使用します。

#define FLAGS   0x4004

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

関連項目