Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » seltsame overflow warning

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
15.01.2004, 21:01 Uhr
~_pepe_
Gast


Häh? Warum geben folgende Zeilen eine Warning aus?


C++:
unsigned long int in;
in=-LONG_MIN+LONG_MAX-100;



Ich habe extra unsigned long int genommen, damit möglichst grosse zahlen keinen überlauf geben.
wenn ich in ausgeben lasse, dann ist natürlich kein überlauf vorhanden -> überlauf kommt halt wie erwartet erst nachdem ich "in" 101 mal inkrementiert habe.

Code:
montecarlo.cc: In function `int main()':
montecarlo.cc:13: Warnung: integer overflow in expression



Wer kann das erklären?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
15.01.2004, 22:56 Uhr
virtual
Sexiest Bit alive
(Operator)


Die Warnung kommt, weil LONG_MIN und LONG_MAX vermutlich signed longs sind, dadurch wird der gesamte Ausdruck so berechnet, als hättest Du mit einem Vorzeichen zu tun.
Der Ausdruck:

C++:
-LONG_MIN+LONG_MAX-100


wird vermutlich umgesetzt als:

C++:
-(-2147483648L)+2147483647L -100;


oder was analoges.
Ich würde dir empfehlen zu schreiben:

C++:
ULONG_MAX-100


--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: