Grundlagen der Programmiersprache C

uint8_t x = 250;
for (int i = 0; i < 10; i++)
    x++;
printf("%d\n", x);

uint8_t ist ein vorzeichenloser 8-Bit-Ganzzahltyp. Welche Ausgabe erzeugt der obige Code, der x zehnmal erhöht, bei der Ausführung?

  1. A4
  2. B255
  3. C260
Antwort und Erläuterung anzeigen

Antwort: A. 4

uint8_t kann 0 bis 255 darstellen. Der Standard legt fest, dass ein Wert, der nicht in einen vorzeichenlosen Ganzzahltyp passt, zum Rest der Division durch 2⁸ = 256 wird; erhöht man ab 250 schrittweise um 1, folgt auf 255 daher wieder 0. Nach zehn Erhöhungen ergibt sich der Rest von 250 + 10 = 260 geteilt durch 256, also 4. Dagegen ist ein Überlauf bei Berechnungen mit vorzeichenbehafteten Ganzzahltypen undefiniertes Verhalten.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Grundlagen der Programmiersprache C

  1. unsigned char habe 8 Bit und int 32 Bit. Welche Ausgabe erzeugt der obige Code bei der Ausführung?
  2. uint8_t sei ein vorzeichenloser 8-Bit-Ganzzahltyp und int habe 32 Bit. Was ergibt die Ausführung des obigen Codes?
  3. int und unsigned int haben 32 Bit. Was ergibt die Ausführung des obigen Codes?
  4. unsigned int habe 32 Bit. Wie verhält sich der obige Code bei der Ausführung?
  5. 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?