Sdílet prostřednictvím


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

Viz také

Referenční dokumentace

C4293 (úroveň 1) upozornění kompilátoru