Udostępnij za pośrednictwem


C6290

Ostrzeżenie C6290: operacji na poziomie bitowym na wynik logiczny:!ma wyższy priorytet niż &.Użyj & & lub (! ()x & y)) zamiast

To ostrzeżenie wskazuje możliwe pomyłek w stosowaniu operatora lub operatorów.

! Operator daje wynik będący wartością logiczną i ma wyższy priorytet niż &.Operatory- i (&) operator ma dwa argumenty arytmetycznych.W związku z tym jeden z następujących błędów: wykryto:

  • Wyrażenie jest mis-parenthesised:

    Ponieważ wynik ! jest logiczną (zero lub jeden), próba badania, że dwie zmienne bity wspólnych będzie jedynie w celu testowania ma najniższy bit po prawej stronie: ((!8) & 1) == 0.

  • ! Operator jest nieprawidłowy i powinny być ~ zamiast:

    ! Operator posiada wynik będący wartością logiczną, podczas gdy ~ operator posiada wynik arytmetyczny.Podmioty te nigdy nie są wymienne, nawet wtedy, gdy działających na wartość logiczną (zero lub jeden): ((!0x01) & 0x10) == 0x0, podczas gdy ((~0x01) & 0x10) == 0x10.

  • Operator dwuargumentowy & jest nieprawidłowa, a zamiast tego należy &&:

    Podczas gdy & czasem mogą być stosowane zamiennie z &&, nie jest równoważny, ponieważ zmusza oceny po prawej stronie wyrażenia.Niektóre efekty uboczne w wyrażenie tego typu może być terminalu.

Trudno ocenić stopień ten problem bez konieczności sprawdzania kodu.Kod powinien inspekcji do zapewnienia dotyczył zamierzonych badań.

Przykład

Poniższy kod generuje ostrzeżenie to:

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

Aby poprawić to ostrzeżenie, należy użyć następującego kodu próbki:

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 ...
  }
}

Ostrzeżenie C6317 jest podać, jeśli ! operator jest po prawej stronie z & operatora.

Zobacz też

Informacje

C6317