Share via


C6290

경고 C6290: 논리적 결과에 대해 비트 연산을 수행했습니다. !는 &보다 우선 순위가 높습니다. 대신 && 또는 (!(x & y))를 사용하십시오.

이 경고는 연산자 사용 또는 연산자 우선 순위에 혼동이 있을 수 있음을 나타냅니다.

! 연산자의 결과는 부울이며 &보다 우선 순위가 높습니다.비트 AND 연산자(&)는 두 개의 산술 인수를 사용합니다. 따라서 다음 오류 중 하나가 발견되었습니다.

  • 식에 괄호가 누락되었습니다.

    !의 결과는 부울(0 또는 1)이기 때문에 두 변수에 공통 비트가 있는지 테스트하려고 하면 결국 ((!8) & 1) == 0과 같이 오른쪽에 최하위 비트가 있는지 테스트하는 것이 됩니다.

  • ! 연산자가 잘못되었으며 대신 ~여야 합니다.

    ! 연산자의 결과는 부울인 반면 ~ 연산자의 결과는 산술입니다. 부울 값(0 또는 1)에 대해 연산하는 경우에도 이들 연산자는 혼용해서 사용할 수 없습니다. 즉, ((!0x01) & 0x10) == 0x0인 반면 ((~0x01) & 0x10) == 0x10입니다.

  • 이항 연산자 &가 잘못되었으며 대신 &&여야 합니다.

    &를 &&와 혼용하여 사용할 수 있는 경우도 있지만 식의 오른쪽을 강제로 평가하기 때문에 이 둘은 동일하지 않습니다. 이러한 식은 경우에 따라 예상치 못한 결과가 발생할 수도 있습니다.

코드를 검사하지 않고는 이 문제의 심각도를 판단하기 어렵습니다. 코드를 검사하여 의도한 테스트가 수행되는지 확인해야 합니다.

예제

다음 코드에서는 이 경고를 발생시킵니다.

void f(int x, int y)
{
  if (!x & y)
  {
    // code ..
  }
}

이 경고를 해결하려면 다음 샘플 코드를 사용합니다.

void f(int x, int y)
{
  /* When testing that x has no bits in common with y. */
  if (!(x & y))
  {
    // code 
  }

  /* When testing for the complement of x in y. */
  if ((~x) & y)
  {
    // code ...
  }
}
#include <windows.h>
void fC(int x, BOOL y )
 {
  /* When y is a Boolean or Boolean result. */
  if ((!x) && y)
  {
    // code ...
  }
}

! 연산자가 & 연산자의 오른쪽에 있으면 경고 C6317이 보고됩니다.

참고 항목

참조

C6317