13. Variablen II

Definitionen von Variablen

Mögliche Typen von Variablen sind

  • int – eine Ganzzahl: -1, 1, 3, 32890
  • float und double – eine “reelle” Zahl: 3.1425, 3e10
  • char – ein Zeichen: a, +

C hatnicht wirklich einen eingebauten String-Typ – ein char ist genau ein Zeichen. Wir werden später sehen, wie so etwas ähnliches wie Stings in C manipuliert werden können.

Die Typen können (teilweise) modifiziert werden durch

  • unsigned – Vorzeichenlose int und char können keine negativen, aber dafür größere positive Zahlen darstellen
  • long – für int (und double) wird der Wertebereich erweitert
  • short – für int wird der Wertebereich eingeschränkt und dafür weniger Speicherplatz benötigt

Übrigens hat auch Python longs, diese sind dort aber Ganzzahlen beliebiger Länge (und auch entsprechend langsam). Also: C-longs sind Python-ints, Python-longs gibts in C so erstmal nicht.

Definitionen und Literale

int zahl;
int eins=1;
int dez32=0x20; /* Hex-Zahlen haben 0x vorne */
int dez16=020;  /* Oktal-Zahlen haben Null vorne --
  das ist heute nur noch als Falle zu verstehen */
long l=3204918L;/* Bei großen Zahlen kommt eine
  Warnung ohne das L */
unsigned long l2=0xdeadbeefUL;
double fl1=3.45;
double fl2=3.45e-10;
char initial='M';
char buchstabe=68;
char str[]="Ein String\n";
char a, b, c, d;

Man kann in C also bei der Definition von Variablen gleich einen Wert mitgeben – oder es auch lassen. In der letzten Zeile sieht man, dass man mehrere Variablen gleichen Typs in einem Statement definieren kann.

Oktalzahlen sind Zahlen, die zur Basis 8 geschrieben sind. Die Schreibweise für Literale ist in C und Python weitgehend identisch. Die Hauptfalle sind die Anführungszeichen. In C sind die einfachen Anführungszeichen für char-Literale reserviert (also einzelne Zeichen), die doppelten für Strings. Die eckigen Klammern hinter str werden ebenfalls erst später behandelt.

Man beachte, dass es kein Problem ist, einem char eine Zahl zuzuweisen. C wandelt viele Werte quasi von selbst in die Typen, die die Variablen haben möchten. Leider kann das auch ins Auge gehen, was Grund etlicher klassischer C-Fehler ist. Gute Compiler geben Warnungen aus, wenn mal Sachen wie char c=332; macht – und char nicht genügend bits zur Darstellung von 332 hat, was heute aber der Normalfall ist und sich aus vielen Gründen auch nicht ändern dürfte.

Üblich ist, dass ein char 8 bit hat (256 Werte), ein short int 16 bit (Wertebereich von -32768 bis 32767) und ein (long) int 32 bit (ca. -2 Milliarden bis +2 Milliarden – das sind die normalen python-ints). doubles gehen von etwa -10308 bis 10308 (das sind die python-floats), floats von etwa -1034 bis 1034. Der ANSI-Standard schreibt das aber nicht genau vor, und insbesondere ist mit der Verbreitung von 64-bit-Arechitekturen damit zu rechnen, dass ints bald 64 bit breit sein werden (also Zahlen zwischen -2 und 2 Trillionen darstellen können).

Die unsigned-Varianten der ganzen Zahlen gehen von 0 bis 2Länge in bits. Üblich ist also, dass ein unsigned int Werte von 0 bis gut 4 Milliarden speichern kann.

Character-Literale der Art ’c’ zählen als ganze Zahlen. Auf üblichen Maschinen gibt es keinen Unterschied zwischen ’A’ und 65. Leider überlässt der C-Standard es dem Compiler, ein unspezifiziertes char signed oder unsigned zu sehen.

Auf üblichen Maschinen kann ’Ä’ demnach -60 oder 196 sein.


Markus Demleitner

Copyright Notice