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
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
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);
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
Comment