Hi Catmad 
Sagt das Handbuch nicht das Integer von -32000 bis +32000
geht?
Der ANSI-Standard schreibt vor, dass int mindestens 16 Bits hat und long int mindestens 32 Bits. Ein normales int kann daher mindestens die Werte von -32768 bis +32767 aufnehmen und ein long int mindestens die Werte von -231 bis +231-1.
Und doch konnte ich eine Schleife mit Integer=100000
programmieren!
Neben den oben genannten Minimalanforderungen empfiehlt der ANSI-Standard, dass int der Standard-Ganzzahl-Typ des Prozessors sein sollte. Da akutelle Intel/AMD-Prozessoren mit 32 Bits arbeiten, geht der Wertebereich eines int von -231 bis +231-1. Mit anderen Worten, auf aktuellen PCs sind long int und int identisch.
Frage: Wird Integer vom Compiler in Double oder DWORD intern
umgewandelt falls es grössere Zahlen braucht?
char , unsigned char und short werden immer in int umgewandelt. unsigned short wird in int umgewandelt, wenn int mehr Bits hat als short int , sonst wird in unsigned int umgewandelt.
Ansonsten gilt, dass vor bestimmten Verknüpfungen von 2 Operanden die beiden Datentypen angepasst werden. Der „kleinere“ Datentyp wird also an den „größeren“ Datentyp angeglichen. Das Ergebnis der Operation hat dann ebenfalls den „größeren“ Datentyp. Der Standard schreibt vor, dass diese Umwandlung verlustfrei passieren muss. Daher kann z.B. ein int (32 Bits) nicht in ein float umgewandelt werden, weil float nur 6 gültige Stellen hat. Auf PCs passiert die Umwandlung daher so:
int -> long -> double -> long double
unsigned int -> unsigend long -> double -> long double
Diese Regeln sind absichtlich sehr schwammig formuliert worden, um die Compilerbauer beim Entwickeln effizienter Compiler nicht zu sehr einzuschränken. Man muss also aufpassen, wie folgende Beispiele zeigen:
1/20 = int/int -> Ergebnis = int
1.0/20 = double/int -> double/double -> Ergebnis = double
1.0f/20 = float/int -> double/double -> Ergebnis = double
Am besten, man macht in Zweifelsfällen eine explizite Typ-Umwandlung, etwa (double)x.
cu Stefan.