Warum verhält sich mein .net Int64 ist tun, als ob sie Int32 Jahre waren?
-
06-07-2019 - |
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“
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