C6317
警告 C6317: 不正確的運算子: 邏輯否定 (!) 與 1 補數 (~) 不能互換
這個警告表示正在將邏輯 NOT (!) 套用至可能是位元旗標的常數。 邏輯 NOT 的結果是布林 (Boolean),而將位元 AND (&) 運算子套用至布林值是不正確的。 請使用一進位補數 (~) 運算子來翻轉旗標。
範例
下列程式碼將產生出這個警告:
#define FLAGS 0x4004
void f(int i)
{
if (i & !FLAGS) // warning
{
// code
}
}
若要更正這則警告,請使用下列程式碼:
#define FLAGS 0x4004
void f(int i)
{
if (i & ~FLAGS)
{
// code
}
}