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!

War es hilfreich?

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
scroll top