Condividi tramite


C6297

Aggiornamento: novembre 2007

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

Vedere anche

Riferimenti

Avviso del compilatore (livello 1) C4293