JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=16fd34fa791693d72eea7bc09ea1aa51Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Wertebereichsüberschreitung eines Datentyps

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Adrian
Mini JLI'ler


Alter: 39
Anmeldedatum: 15.05.2007
Beiträge: 8

Medaillen: Keine

BeitragVerfasst am: 23.01.2009, 15:27    Titel: Wertebereichsüberschreitung eines Datentyps Antworten mit Zitat

Hi zusammen,

in einem Listing, das ich ausprobiert habe, findet eine Wertebereichsüberschreitung statt. Ungefähr so (Code nicht vollständig):

void main(void)
{
short GehaltMeier = 30000;

GehaltMeier = Gehaltmeier + 5000;
}

Meine Frage: Der Datentyp >>short<< hat einen Wertebereich von -32768 bis +32767. Wenn ich den Code ändere

void main(void)
{
short GehaltMeier =30000;

GehaltMeier = GehaltMeier + 2768;
}

findet keine Überschreitung mehr statt. Warum???
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
=]Mid[=]Night[=
Super JLI'ler



Anmeldedatum: 20.11.2002
Beiträge: 380
Wohnort: Aachen
Medaillen: Keine

BeitragVerfasst am: 23.01.2009, 21:26    Titel: Antworten mit Zitat

CPP:
short GehaltMeier = 30000;
GehaltMeier = GehaltMeier + 2768;
std::cout << GehaltMeier;

gibt bei mir -32768 aus ... also eigentlich sollte da ein Überlauf stattfinden
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Otscho
Super JLI'ler


Alter: 36
Anmeldedatum: 31.08.2006
Beiträge: 338
Wohnort: Gummibären-Gasse
Medaillen: Keine

BeitragVerfasst am: 24.01.2009, 10:22    Titel: Antworten mit Zitat

Kann es sein, dass dein OS den Wert intern doch in einem 32bit-Typ speichert - aus Effiziensgründen ?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Adrian
Mini JLI'ler


Alter: 39
Anmeldedatum: 15.05.2007
Beiträge: 8

Medaillen: Keine

BeitragVerfasst am: 24.01.2009, 14:40    Titel: Antworten mit Zitat

Zitat:
Kann es sein, dass dein OS den Wert intern doch in einem 32bit-Typ speichert - aus Effiziensgründen ?


Wie finde ich dies heraus?

Mein Betriebssystem ist Windows XP. Das Listing habe ich mit Visual Studio C++ 6.0 ausprobiert. Der Prozessor meines Laptops ist ein Intel Core Duo.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 24.01.2009, 17:58    Titel: Antworten mit Zitat

könntest mal sizeof() benutzen.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Adrian
Mini JLI'ler


Alter: 39
Anmeldedatum: 15.05.2007
Beiträge: 8

Medaillen: Keine

BeitragVerfasst am: 24.01.2009, 19:10    Titel: Antworten mit Zitat

Mit sizeof(short) ergibt sich der Wert 2.

Nach meinen Recherchen steht der Wert 2 für die Anzahl an Byte, die eine short Variable im Arbeitsspeicher meines Laptops belegt. 2 Byte entsprechen 16 Bit. Mit 16 Bit sind 2^16 Dezimalzahlen darstellbar. Schon mal etwas gelernt ^^.

Der Groschen ist immer noch nicht gefallen. Warum findet bei mir kein Überlauf statt, wenn ich so, wie im ersten Post beschrieben, vorgehe?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Adrian
Mini JLI'ler


Alter: 39
Anmeldedatum: 15.05.2007
Beiträge: 8

Medaillen: Keine

BeitragVerfasst am: 24.01.2009, 19:15    Titel: Antworten mit Zitat

Es hat sich geklärt, jetzt reagiert das Programm wie erwartet. Ist mir ein Rätsel, warum es nun funktioniert.

Danke euch, jetzt geht's weiter.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
fast hawk
Senior JLI'ler



Anmeldedatum: 15.07.2005
Beiträge: 237
Wohnort: Freiburg
Medaillen: Keine

BeitragVerfasst am: 27.01.2009, 20:25    Titel: Antworten mit Zitat

mmhh bin zwar spät dran aber soweit ich weiß wenn du ein short "überläufst" in positiver Richtung springt des zum maximalen negativ wert.
So ist dies ja auch zulässig:
unsigned short WeißGottWas = -1;
_________________
Jetziges Projekt: The Ring War
Status: 40%
-----------------------------------
Nicht weil es schwer ist, wagen wir es nicht, sondern weil wir es nicht wagen, ist es schwer.
--
Lucius Annaeus Seneca (4)
röm. Philosoph, Dramatiker und Staatsmann
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum