Frage

Ich bin ein seltsames Verhalten in einem .net-Programm erleben:

Console.WriteLine(Int64.MaxValue.ToString());
// displays 9223372036854775807, which is 2^63-1, as expected

Int64 a = 256*256*256*127; // ok

Int64 a = 256*256*256*128; // compile time error : 
//"The operation overflows at compile time in checked mode"
// If i do this at runtime, I get some negative values, so the overflow indeed happens.

Warum verhält sich mein Int64 ist, als ob sie Int32 Jahre waren, obwohl Int64.MaxValue scheint zu bestätigen, 64 Bits sie verwenden?

Wenn es relevant ist, ich bin mit einem 32-Bit-Betriebssystem und die Zielplattform ist auf „Jede CPU“

War es hilfreich?

Lösung

Ihre RHS ist nur Int32 Werte verwendet, so dass der ganze Vorgang wird Int32 Arithmetik durchgeführt unter Verwendung, dann ist die Int32 Ergebnis auf eine lange gefördert wird.

Ändern Sie ihn auf diese:

Int64 a = 256*256*256*128L;

und alles wird gut.

Andere Tipps

Verwendung:

Int64 a = 256L*256L*256L*128L;

der L-Suffix bedeutet Int64 wörtliche, kein Suffix bedeutet Int32.

Was ist Ihr schrieb:

Int64 a = 256*256*256*128

bedeutet:

Int64 a = (Int32)256*(Int32)256*(Int32)256*(Int32)128;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top