Informatiker Board (http://www.informatikerboard.de/board/index.php)
- Themengebiete (http://www.informatikerboard.de/board/board.php?boardid=1)
-- Technische Informatik (http://www.informatikerboard.de/board/board.php?boardid=7)
--- Zahlenüberlauf (http://www.informatikerboard.de/board/thread.php?threadid=540)
Geschrieben von NoIdea am 29.06.2009 um 17:29:
Zahlenüberlauf
hi,
ich hab folgendes probllem. wenn ich in c++ signed short int x=100000 definiere und später einfach so ausgeben lasse bekomm ich -31072 raus, da x ja nur werte zwischen -32768<= x<=32767 annehmen kann.
nun weiß ich aber nicht wie man theoretisch auf diesen wert kommt. hab einfach das komplement gebildet und auch vom betrag her das ergebnis bekommen. ich versteh jedoch nicht, warum das vorzeichen negativ ist.
ich hoffe einer hat ne idee.
Geschrieben von Thomas am 29.06.2009 um 18:41:
Wenn du x durchzählst, ist 32767+1 = -32768... dann zählst du von dort aus weiter bis 0 und dann weiter bis du wieder bei 32767 ankommst.. und bei 100.000 bist du dann bei -31072.
Geschrieben von NoIdea am 29.06.2009 um 18:50:
also fange ich an von 0 aus zu gehen bis meine 100000 "aufgebraucht" sind. und wie mach ich das jetzt rechnerisch. die komplementbildung ist ja eigentlich nichts anderes nur das ich dabei irgendwie nicht auf das vorzeichen komme. das komplement kann zwar als negativer wert aufgefasst werden, aber wenn ich jetzt sowas wie unsigned short int hätte, dann gäbe es ja keine negative zahl und ich wüsste nicht was ich machen sollte.
Geschrieben von Thomas am 30.06.2009 um 17:02:
Rechnerisch würde ich das ganze so machen (65536 = ein gesamter Durchlauf, 32768+1+32767 mal)
100000 - 2*65536 = -31072
Da Stopp im 2. Durchlauf.
Forensoftware: Burning Board, entwickelt von WoltLab GmbH