Grundlagen der Programmiersprache C

unsigned char a = 200, b = 100;
int s = a + b;
unsigned char c = a + b;
printf("%d %d\n", s, c);

unsigned char habe 8 Bit und int 32 Bit. Welche Ausgabe erzeugt der obige Code bei der Ausführung?

  1. A44 44
  2. B300 44
  3. C300 300
Antwort und Erläuterung anzeigen

Antwort: B. 300 44

In C werden Werte von Typen, die kleiner als int sind (char, short usw.), vor der Berechnung in int umgewandelt (Integer-Promotion). a + b wird daher nicht mit 8 Bit, sondern als int berechnet und ergibt 300, und s vom Typ int erhält unverändert 300. Bei der Zuweisung an das 8 Bit breite c wird der Wert in den Rest der Division durch 256 umgewandelt, also 44. Auch auf einem 8-Bit-Mikrocontroller werden Zwischenergebnisse eines Ausdrucks laut Standard mit der Breite von int berechnet.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Grundlagen der Programmiersprache C

  1. uint8_t sei ein vorzeichenloser 8-Bit-Ganzzahltyp und int habe 32 Bit. Was ergibt die Ausführung des obigen Codes?
  2. int und unsigned int haben 32 Bit. Was ergibt die Ausführung des obigen Codes?
  3. unsigned int habe 32 Bit. Wie verhält sich der obige Code bei der Ausführung?
  4. Ein Programm, das c aus „char c = 200;“ mit %d von printf ausgibt, zeigt nach dem Kompilieren mit gcc für Linux auf x86-64 den Wert −56, mit gcc für Linux auf Arm dagegen 200. Was ist der Grund für den Unterschied?
  5. Welche Ausgabe erzeugt der obige Code, in dem b++ rechts von && und || steht, bei der Ausführung?