Avviso C6297
Overflow aritmetico: il valore a 32 bit viene spostato, quindi viene eseguito il cast a un valore a 64 bit. Il risultato potrebbe non essere un valore previsto
Osservazioni:
Questo avviso indica un comportamento errato risultante da regole di promozione integrali e tipi maggiori di quelli in cui viene in genere eseguita l'aritmetica.
In questo caso, un valore a 32 bit è stato spostato a sinistra e il risultato di tale spostamento è stato eseguito il cast a un valore a 64 bit. Se lo spostamento ha superato l'overflow del valore a 32 bit, i bit vengono persi.
Se non si vogliono perdere bit, eseguire il cast del valore per passare a una quantità a 64 bit prima che venga spostata. Se si desidera perdere bit, eseguire il cast appropriato a unsigned long
o a un short
tipo. In alternativa, mascherare il risultato del turno. Entrambi gli approcci eliminano questo avviso e rendono più chiara la finalità del codice.
Nome dell'analisi del codice: RESULTOFSHIFTCASTTOLARGERSIZE
Esempio
Il codice seguente genera questo avviso:
void f(int i)
{
unsigned __int64 x;
x = i << 34;
// code
}
Per correggere questo avviso, usare il codice seguente:
void f(int i)
{
unsigned __int64 x;
// code
x = static_cast<unsigned __int64>(i) << 34;
}
Vedi anche
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per