Seltsame c # Überlauffehler
-
23-08-2019 - |
Frage
Kann mir jemand erklären, mir den Grund der Überlauf in eine Variable? Beachten Sie, dass b größer als a.
static void Main(string[] args)
{
int i = 2;
long a = 1024 * 1024 * 1024 * i;
long b = 12345678901234567;
System.Console.WriteLine("{0}", a);
System.Console.WriteLine("{0}", b);
System.Console.WriteLine("{0}", long.MaxValue);
}
-2147483648
12345678901234567
9223372036854775807
Press any key to continue . . .
Danke!
Lösung
Die RHS ist eine int Multiplikation, da jeder Teil des Ausdrucks ist ein int. Nur weil es auf einen langen zugeordnet ist, bedeutet nicht, es mit langer Arithmetik durchgeführt wird.
Ändern Sie es an:
long a = 1024L * 1024 * 1024 * i;
und es wird funktionieren. (Der Unterschied ist die L am Ende der ersten 1024).
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow