C6297
avviso C6297: Overflow aritmetico: il valore a 32 bit viene spostato, quindi sottoposto a cast su un valore a 64 bit.Il risultato potrebbe non essere il valore previsto
Questo avviso indica il comportamento non corretto che risulta da regole di promozione integrali e da tipi di dimensioni maggiori di quelle in cui l'aritmetica viene solitamente eseguita.
In questo caso un valore a 32 bit è stato spostato a sinistra e il risultato dello spostamento è stato sottoposto a cast su un valore a 64 bit.Se lo spostamento ha provocato l'overflow del valore a 32 bit, i bit vanno perduti.
Per evitare perdite di bit, eseguire il cast del valore da spostare in una quantità a 64 bit prima di eseguire lo spostamento.Se si desidera che avvenga la perdita di bit, eliminare l'avviso e chiarire ulteriormente lo scopo del codice eseguendo il cast appropriato su un tipo long senza segno o short oppure nascondendo il risultato dello spostamento.
Esempio
Il codice seguente genera questo avviso:
void f(int i)
{
unsigned __int64 x;
x = i << 34;
// code
}
Per risolvere il problema, utilizzare il codice seguente:
void f(int i)
{
unsigned __int64 x;
// code
x = ((unsigned __int64)i) << 34;
}