Announcement

Collapse
No announcement yet.

Variablenoverflow trotz ausreichend Platz

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Variablenoverflow trotz ausreichend Platz

    Hi,

    habe einmal eine Frage.
    Ich habe die Variable volume vom Typ unsigned long. D.h. die maximale ganzzahlige Zahl, die ich damit darstellen kann wäre
    (2^64)-1.
    Hier ein kleiner Ausschnitt
    Code:
    volume = Convert.ToUInt64(m_length * m_width * m_height);
    Ich habe extra die ConvertToUInt64 Methode angewand. (die drei Faktoren sind vom Typ uint) Setze ich um das ganze jetzt einen checked Block und lasse ihn laufen, so erhalte ich folgende Meldung

    Arithmetic operation resulted in an overflow.

    Wenn ich mir dann die Zahlen anschaue, dann stelle ich fest, dass alle drei Faktoren den Wert 10 000 haben. Aber 10 000 * 10 000* 10 000 ist doch kleiner wie (2^64)-1. Warum bekomme ich trotzdem einen Overflow???

    [Edit]
    Liegt an den implizierten Konvertierungen, zuerst wird die innere Klammer ausgerechnet. C# wandelt alle ganzzahligen Werte in int Werte um, sofern man es nicht dazu zwingt das nicht zu tun. Multipliziert man das ganze erhält man 10 Mrd. das passt nicht mehr in einen int Wert, es gibt einen Overflow
    Zuletzt editiert von Neodym; 01.01.2011, 22:05. Reason: Fehler gefunden

  • #2
    Wieviel ergibt

    10 000 * 10 000* 10 000

    ???

    UInt = 4.294.967.295
    Christian

    Comment


    • #3
      Originally posted by Christian Marquardt View Post
      Wieviel ergibt

      10 000 * 10 000* 10 000

      ???

      UInt = 4.294.967.295
      Nein ich habe gemeint, dass Volume vom Typ ulong ist, das hätte da schon reingepasst. Aber halt nicht in einen int-Wert, da C# alles in int und nicht in uint Werte umwandelt

      Comment


      • #4
        Versuch

        ((long)m_length * (long)m_width * (long)m_height);
        Christian

        Comment

        Working...
        X