C6317
경고 C6317: 잘못된 연산자: 논리 부정(!)과 1의 보수(~)는 동일하게 사용할 수 없습니다.
이 경고는 비트 플래그일 가능성이 있는 상수에 논리 부정(!)이 적용되고 있음을 나타냅니다.논리 부정의 결과는 부울입니다. 부울 값에 비트 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
}
}