Integer-Datentypen in C

Persönliche Seite #2641435
Lesenswert?

Hallo,

der Integer bei C ist ja grundsätzlich maschinenabhängig.
Nun würde mich aber mal interessieren welche Aussagen über Integer fest 
vereinbart sind und wo diese nachzulesen sind.

Beim C99-Standard habe ich beispielsweise gefunden, dass ein short 
mindestens 16 Bit lang sein muss und ein long mindestens 32 Bit. In 
anderen Aussagen findet man dann aber auch so Sachen wie "Der General 
C-Standard besagt, dass für die Anzahl Bits gilt: char <= short <= int 
<= long".

Und so gibt's noch weitere Aussagen die sich teilweise aber gegenseitig 
"beißen".

Weiß hier jemand wie die Integer-Typen bei C/C++ genau definiert sind 
und in welchem Standard das jeweils nachzulesen ist?

Vielen Dank,

Thomas
#2641483
Lesenswert?

Thomas Finke schrieb:

> Und so gibt's noch weitere Aussagen die sich teilweise aber gegenseitig
> "beißen".

Als da wären?

> Weiß hier jemand wie die Integer-Typen bei C/C++ genau definiert sind
> und in welchem Standard das jeweils nachzulesen ist?

Du hast das bereits aufgezählt. In C89 sind die Mindestgrössen durch die 
Vorgaben für Zeugs wie MIN_INT festgelegt, und eben die von dir schon 
zitierte relative Ordnung. Das wars auch schon.
Gast #2641487
Lesenswert?

Thomas Finke schrieb:
> der Integer bei C ist ja grundsätzlich maschinenabhängig.
Jein, in grober Näherung ist der Compilerabhängig.

> Nun würde mich aber mal interessieren welche Aussagen über Integer fest
> vereinbart sind und wo diese nachzulesen sind.
In erster Linie im Handbuch deines Compilers. Hält sich der an weitere 
Standards (etwa C99), dann kannst du natürlich auch in diesen 
weiterlesen.
#2642845
Lesenswert?

Thomas Finke schrieb:
> Beim C99-Standard habe ich beispielsweise gefunden, dass ein short
> mindestens 16 Bit lang sein muss und ein long mindestens 32 Bit.

Richtig. Das steht zwar nicht direkt so drin, ergibt sich aber indirekt 
über den Wertebereich, den sie mindestens können müssen.

> In anderen Aussagen findet man dann aber auch so Sachen wie "Der General
> C-Standard besagt, dass für die Anzahl Bits gilt: char <= short <= int
> <= long".

Auch das stimmt.

> Weiß hier jemand wie die Integer-Typen bei C/C++ genau definiert sind

Zusätzlich zu dem, was du schreibst, muß char 8 mindestens 8 Bit und 
long long mindestens 64 Bit sein. Dann hat jeder dieser Typen außer char 
ein Vorzeichen, wenn man nicht explizit unsigned davor schreibt. Bei 
char ist das vom Compiler abhängig. Außerdem ist sizeof(char) immer 1.

> und in welchem Standard das jeweils nachzulesen ist?

ISO/IEC 9899:2011 (oder einer der Vorgänger. Die sind zwar ungültig, 
aber definieren diese Sachen gleich).

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren