Forum: Compiler & IDEs Int Variablen


von Stefan G. (steg13)


Lesenswert?

kann mir mal bitte jemand die verschiedenen Integer erklären oder sagen 
wo es steht.
Ich kenne:
int16_t  - 16bit mit Vorzeichen
uint16_t - 16bit ohne Vorzeichen
int8_t -    8bit mit Vorzeichen
uint8_t -   8bit ohne Vorzeichen

In Definitionen findet man dann noch solche Angaben:
#define u16 unsigned int - vermutlich 16bit ohne Vorzeichen
Gibt es sowas auch als 8bit mit Vorzeichen?

Welche Integerart habe ich als Funktionsrückgabe wenn ich schreibe:
int test(int x){
oder:
int yxz - also einfach nur int?

von der mechatroniker (Gast)


Lesenswert?

Einfach nur int ist Definitionssache: C-Spezifikation sagt: mehr oder 
gleich viel Bits wie short, aber weniger oder gleich viel Bits wie long.

Üblich bei C-Compilern für DOS, µC Win3.1 etc. als Zielplattform:
short = 16 Bit
int = 16 Bit
long = 32 Bit

bei Zielplattform Windows (ab 95), Linux, Unix:
short = 16 Bit
int =  32 Bit
long = 32 Bit

8 Bit ist übrigens char, gibts natürlich auch als signed und unsigned.

von Malte _. (malte) Benutzerseite


Lesenswert?

Die "Größe" einer Variable kannst du dir im Zweifelsfall mit 
sizeof(int), compiliert für dein Zielsystem, ausgeben lassen.

von Rolf Magnus (Gast)


Lesenswert?

@Stefan:

Die [u]int*_t-Typen sind Teil der ISO-C-Norm und im Header <stdint.h> 
definiert. Da gibt es auch noch [u]int_fast*_t und [u]int_least*_t. Die 
ersteren sind gedacht für Typen, die bei einer bestimmten Bitzahl 
möglichst schnell berechnet werden können, letztere für die 
kleinstmöglichen Typen mit mindestens der angegebenen Bitzahl.

Da viele Compiler die ISO-Norm immer noch nicht umsetzen (obwohl die 
aktuell gültige Version schon 8 Jahre alt ist), bietet nicht jeder 
diesen Header an. Entweder deshalb, oder weil der Programmierer nichts 
von <stdint.h> wußte, werden oft eigene Namen definiert. Aber bitte 
nicht mit #define, sondern mit typedef.

> Einfach nur int ist Definitionssache: C-Spezifikation sagt: mehr oder
> gleich viel Bits wie short, aber weniger oder gleich viel Bits wie
> long.

... und mindestens einen Wertebereich von -32767 bis 32767.

von Stefan G. (steg13)


Lesenswert?

Danke

meine Frage bezog sich auf AVR-GCC
(hab ich dummerweise vergessen zu erwähnen)

Ich denke jetzt ist alles klar

von Rolf Magnus (Gast)


Lesenswert?

Bei avr-gcc ist int 16 Bit groß und <stdint.h> ist vorhanden.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.