Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Adrian Mini JLI'ler
Alter: 39 Anmeldedatum: 15.05.2007 Beiträge: 8
Medaillen: Keine
|
Verfasst am: 23.01.2009, 15:27 Titel: Wertebereichsüberschreitung eines Datentyps |
|
|
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 |
|
|
=]Mid[=]Night[= Super JLI'ler
Anmeldedatum: 20.11.2002 Beiträge: 380 Wohnort: Aachen Medaillen: Keine
|
Verfasst am: 23.01.2009, 21:26 Titel: |
|
|
CPP: | short GehaltMeier = 30000;
GehaltMeier = GehaltMeier + 2768;
std::cout << GehaltMeier;
|
gibt bei mir -32768 aus ... also eigentlich sollte da ein Überlauf stattfinden |
|
Nach oben |
|
|
Otscho Super JLI'ler
Alter: 36 Anmeldedatum: 31.08.2006 Beiträge: 338 Wohnort: Gummibären-Gasse Medaillen: Keine
|
Verfasst am: 24.01.2009, 10:22 Titel: |
|
|
Kann es sein, dass dein OS den Wert intern doch in einem 32bit-Typ speichert - aus Effiziensgründen ? |
|
Nach oben |
|
|
Adrian Mini JLI'ler
Alter: 39 Anmeldedatum: 15.05.2007 Beiträge: 8
Medaillen: Keine
|
Verfasst am: 24.01.2009, 14:40 Titel: |
|
|
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 |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
|
Nach oben |
|
|
Adrian Mini JLI'ler
Alter: 39 Anmeldedatum: 15.05.2007 Beiträge: 8
Medaillen: Keine
|
Verfasst am: 24.01.2009, 19:10 Titel: |
|
|
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 |
|
|
Adrian Mini JLI'ler
Alter: 39 Anmeldedatum: 15.05.2007 Beiträge: 8
Medaillen: Keine
|
Verfasst am: 24.01.2009, 19:15 Titel: |
|
|
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 |
|
|
fast hawk Senior JLI'ler
Anmeldedatum: 15.07.2005 Beiträge: 237 Wohnort: Freiburg Medaillen: Keine
|
Verfasst am: 27.01.2009, 20:25 Titel: |
|
|
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 |
|
|
|