Kein Überlauf?
-
Hallo liebe Community,
ich bin Frischling in der Programmierwelt und habe hier ein Problem mit meinem Code:#include <iostream> #include <cstdlib> using namespace std; int main () { unsigned short max = 65535; cout << max+1; system("PAUSE"); return 0; }
Mein Problem hierbei ist jetzt, dass ich rein theoretisch doch einen Überlauf erzeugen müsste und mir mein Rechner nen Wert "0" ausspucken müsste. Tut er aber nicht. Stattdessen bekomme ich den Wert "65536" heraus. Ich kann ihn hier bis zum maximalen 32-Bit Wert ausgeben lassen. Mein "unsigned short" wird praktisch ignoriert. Beim "signed short" habe ich das selbe Problem. Habe ich da etwas falsch verstanden oder ist mein Compiler kaputt?
Danke im vorraus!
-
max ist also short. und die 1 ist was? und was sind sie dann zusammenaddiert?
-
Hat sich schon erledigt, danke
-
Dies fällt unter das Stichwort Promotion (Typumwandlung)
Bei
unsigned short max = 65535; max += 1; cout << max;
würde aber 0 ausgegeben werden (sofern unsigned short 16 Bit groß ist).
@volkard: Deine Antwort erscheint mir irgendwie falsch...
-
Ja, was für einen Typ die 1 hat ist wurst, da auch bei short+short in Wirklichkeit int+int gerechnet wird. Die Berechnung short+short gibt's in C++ schlicht und ergreifend nicht.
-