C6290
upozornění C6290: bitová operace na logický výsledek:!má vyšší prioritu než &.Použití & & nebo (! ()x & y)) místo
Toto upozornění znamená možné záměně vyhnout při použití operátoru nebo priority operátorů.
! Operátor dává výsledek a má vyšší prioritu než &.Bitového- a (a) operátor má dva argumenty aritmetické.Proto jednu z následujících chyb byl zjištěn:
Výraz je mis parenthesised:
Protože v důsledku ! je logická hodnota (nula nebo jedna), pokus o test, zda mají dvě proměnné bity budou společné pouze nakonec testování nejnižší bit představuje v pravé: ((!8) & 1) == 0.
! Operátor je nesprávné a musí být ~ místo:
! Operátor má logickou, zatímco ~ má operátor aritmetický výsledek.Tyto operátory jsou zaměnitelné, nikdy i když na logickou hodnotu (nula nebo jedna): ((!0x01) & 0x10) == 0x0, zatímco ((~0x01) & 0x10) == 0x10.
Binární operátor & je nesprávný a měla by být &&:
Při & někdy zaměnitelné, s &&, není rovnocenné, protože nutí hodnocení v pravé části výrazu.Některé vedlejší účinky v tomto typu výrazu lze terminálu.
Je obtížné posoudit bez prozkoumávání kód závažnost tohoto problému.Kód by měly podléhat kontrole zajistit probíhající zamýšlený test.
Příklad
Následující kód vygeneruje toto upozornění:
void f(int x, int y)
{
if (!x & y)
{
// code ..
}
}
Chcete-li opravit toto upozornění, použijte následující ukázkový kód:
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 ...
}
}
Hlášení C6317 upozornění, pokud ! operátor je na pravé straně & operátor.