Um hier mal die Rätselraterei abztustellen ("int 8 bit?", "short ohne
Vorzeichen?", "short größer als int?"):
In ISO-C ist gibt es folgende Integer-Typen:
char
short
int
long
long long
Die gibt es jeweils mit und ohne Vorzeichen. Außer char hat jeder dieser
Typen ein Vorzeichen, wenn kein "unsigned" davor steht. Bei char ist es
Compiler-spezifisch, ob es ohne weitere Angabe mit oder ohne Vorzeichen
ist.
Es gilt
sizeof(char) = 1
sizeof(short) >= sizeof(char)
sizeof(int) >= sizeof(short)
sizeof(long) >= sizeof(int)
sizezof(long long) >= sizeof(long)
Außerdem muß char mindestens 8 Bit breit sein, short und int mindestens
16 Bit, long mindestens 32 Bit und long long mindestens 64 Bit. Diese
Anforderung steht zwar nicht direkt so in der ISO-Norm, ergibt sich aber
aus den Anforderungen an die mindestens zu untersütztenden Wertebereiche
dieser Typen.
Alles, was von den obigen Bedingungen abweicht, verstößt gegen die
ISO-C-Spezifikation.
Floh schrieb:
> long schrieb:
>> Ich verwende int16_t was auch soweit funktioniert. Nun gewöhne ich mir
>> eine andere Schreibweise an und wollte es mit short machen.
>
> Nimm lieber die Schreibweise int16_t. Da weist du wenigstens genau, was
> du hast,
Sofern es wirklich unbedingt exakt 16 Bit sein müssen und auf gar keinen
Fall mehr sein dürfen. Ansonsten wäre je nach Anforderung int_fast16_t
oder int_least16_t vorzuziehen.
Art Ickel aus W. schrieb:
>> Nimm z.B. den Wertebereich Datentyp int:
>> - 8051: -32768 bis 32767
>> - "PC": −2.147.483.648 bis 2.147.483.647
>
> Bei den PIC CCS Compiler kann man int auch auf 8 Bit, also -128 .. +127
> einstellen. Ich glaube sogar, das war die Default Einstellung.
Bei avr-gcc kann man das auch so einstellen, vor allem, weil der
Compiler hier ein paar Defizite bei der Optimierung hat. Es wird aber
trotzdem selten verwendet, da es mehr Probleme verursacht als es löst.
Es ist wie gesagt auch nicht konform.
> Und wie ist's bei ner 64 Bit Maschine ?
Unterschiedlich. Nach ISO C sollte (muß aber nicht) int 64 Bit breit
sein, da das die native Wortbreite der Maschine ist. Das wird aber in
der Regel nicht gemacht, da einem dann nach unten hin die Typen
ausgehen. Man will ja auch 8, 16, und 32 Bit haben, hat aber nur zwei
Typen, die kleiner als int sein dürfen, nämlich char und short. Deshalb
ist int dort in der Regel auch 32 Bit, short 16 Bit und char 8 Bit. Bei
long gibt es dann Unterschiede. Auf manchen 64-Bit-Systemen ist long 32
Bit breit, auf anderen 64 Bit. Ob es bei letzteren auch üblich ist, long
long 128 Bit breit zu machen, ist mir allerdings nicht bekannt.