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.