integer != integer

der Datentyp integer repräsentiert in C einen ganzzahligen Datentyp.
Allerdings ist der Wertebereich nicht exakt definiert, sondert unter anderem abhängig von der CPU Architektur, wie der Registerbreite.

Die Größe eines integer beträgt 2 Byte oder 4 Byte, je nach Architektur des Zielsystem.

Es gelten folgende Abstufungen:

sizeof(char) <= sizeof(short) <= sizeof(integer) <= sizeof(long) <= sizeof(long long)

Die Mindestgrößen der Standardtypen ist in der C Library <limits.h> definiert.

DatentypeSpeicherplatzWertebereichAnmerkung
char1 Byte0 bis 255
oder
-128 bis 127
Abhängig von der Compiler Standardeinstellung
(meist unsigned char)
unsigned char1 Byte0 bis 255
signed char1 Byte-128 bis 127
short2 Byte-32768 bis 32767
unsigned short2 Byte0 bis 65535
int2 Byte
oder
4 Byte
-32768 bis 32767
oder
-2147483648 bis 2147483647
je nach Zielarchitektur!
unsigned int2 Byte
oder
4 Byte
0 bis 65535
oder
0 bis 4294967295
long4 Byte-2147483648 bis 2147483647
unsigned long4 Byte0 bis 4294967295
long long8 Byte-9223372036854775808 bis9223372036854775807unterstützt seit C99
unsigned long long 8 Byte0 bis 18446744073709551615unterstützt seit C99

Es empfiehlt sich mit defines eigene Datentypen zu definierten z.B.

#define uint32 unsigned int

oder nach dem C99 Standard die <stdint.h> verwenden, wo optional folgende Macros definiert sind:

#include <stdint.h>

int16_t a=0;
uint16_t b=0;
int32_t c=0;
uint32_t d=0;

Achtung: Kennt der Compiler nicht das Zielsystem, können die exakten Datentypen von der <stdint.h> nicht verwendet werden.

weiterführende Links

https://en.wikipedia.org/wiki/C_data_types

Herzlich Willkommen

auf meinem neuen Blog über Embedded Programmierung. Hier werde ich regelmäßig kleinere und hoffentlich nützliche Beiträge rundum die Mikrocontroller Programmierung schreiben.

Ich wünsche Ihnen viel Spaß und freue mich auf konstruktive Rückmeldung.

Euer Martin Kessler