Warnung C6297
Arithmetischer Überlauf: Der 32-Bit-Wert wird verschoben und dann in den 64-Bit-Wert umgewandelt. Die Ergebnisse entsprechen möglicherweise nicht dem erwarteten Wert.
Hinweise
Diese Warnung weist auf ein falsches Verhalten hin, das aus integralen Heraufsteigerregeln und Typen resultiert, die größer sind als die, in denen Arithmetik normalerweise ausgeführt wird.
In diesem Fall wurde ein 32-Bit-Wert nach links verschoben, und das Ergebnis dieser Schicht wurde in einen 64-Bit-Wert umgewandelt. Wenn die Schicht den 32-Bit-Wert überläuft, gehen Bits verloren.
Wenn Sie keine Bits verlieren möchten, wandeln Sie den Wert in eine 64-Bit-Menge um, bevor sie verschoben wird. Wenn Sie Bits verlieren möchten, führen Sie die entsprechende Umwandlung oder unsigned long
einen Typ aus short
. Oder masken Sie das Ergebnis der Schicht. Jeder Ansatz beseitigt diese Warnung und macht die Absicht des Codes klarer.
Codeanalysename: RESULTOFSHIFTCASTTOLARGERSIZE
Beispiel
Der folgende Code generiert diese Warnung:
void f(int i)
{
unsigned __int64 x;
x = i << 34;
// code
}
So korrigieren Sie die Warnung unter Verwendung des folgenden Codes
void f(int i)
{
unsigned __int64 x;
// code
x = static_cast<unsigned __int64>(i) << 34;
}