Hallo Community,
ich selbst bin absoluter C# - Anfänger und stieß vor kurzer Zeit auf folgendes Phänomen:
int i = 0;
while(true) {
Console.WriteLine("Quadrat: "+(i*i)+" Wert von i: "+i);
i++;
}
(Der Sinn ist zu vernachlässigen)
Intressant ist hierbei, dass zum Beispiel bei i = 55000 eine NEGATIVE Quadratzahl entsteht, was ich mir nicht erklären kann, da aus der Multiplikation zwei positiver Ganzahl sowie aus der Multiplikation zweier negativer Ganzzahlen immer eine positive Zahl entsteht.
Gerne würde ich wissen warum also eine negative Zahl entsteht.
Hinweis: Ich hörte mal etwas von einem "Ganzahlen Überlauf" (Integer Overflow) vllt. hat es irgendwas damit zu tun...
MfG
Johannes
Bitte in Zukunft Edit Funktion nutzen.
Deine Vermutung ist richtig, und Stu42s Hinweis ist die theoretische Erklärung dahinter.
Kurz und knapp: int geht von Int32.MinValue (-2.147.483.648) bis Int32.MaxValue (2.147.483.647). Ergebnisse, die außerhalb dieses Bereichs liegen, sind mit Int32 nicht darstellbar. Der Versuch, sie darzustellen, resultiert u.U. in negativen Zahlen, weil -> Wikipedia 2er-Komplement.
Um das zu vermeiden, kannst du andere Typen außer Int32 verwenden, die einen anderen Wertebereich darstellen können. Beispiel wäre decimal oder Int64.
LaTino
Ah, WP hat auch direkt einen Artikel zum Überlauf: Arithmetischer Überlauf
"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)
Hi,
für sehr große Zahlen kann man auch https://msdn.microsoft.com/de-de/library/system.numerics.biginteger(v=vs.110).aspx verwenden.
Nur der Vollständigkeit halber.
LG