C6297
upozornění C6297: Přetečení aritmetické: 32bitová hodnota posunutí, pak přetypovat na hodnotu 64 bit.Očekávaná hodnota nemusí být výsledek
Toto upozornění znamená nesprávné chování, které vyplývá z pravidla nedílnou propagace a typy větší než ty, které aritmetický obvykle provádí.
V tomto případě byla 32bitová hodnota posunutí vlevo a byl výsledek této shift přetypovat na hodnotu 64 bit.Pokud shift přesáhla 32bitová hodnota, dojde ke ztrátě bitů.
Pokud nechcete ztratit bitů, přetypujte hodnotu posunutí 64bitové množství, než se nakloní.Pokud chcete ztratit bitů, provedení vhodné osazení na nepodepsaný dlouhý nebo krátký typu nebo maskování výsledek shift budou eliminovat toto upozornění a záměr více vymazat kódu.
Příklad
Následující kód vygeneruje toto upozornění:
void f(int i)
{
unsigned __int64 x;
x = i << 34;
// code
}
Chcete-li opravit toto upozornění, použijte následující kód:
void f(int i)
{
unsigned __int64 x;
// code
x = ((unsigned __int64)i) << 34;
}