Basis van programmeren in C

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

uint8_t is een 8-bits integertype zonder teken. Wat is de uitvoer als de bovenstaande code, die x tien keer verhoogt, wordt uitgevoerd?

  1. A4
  2. B255
  3. C260
Antwoord en toelichting tonen

Antwoord: A. 4

uint8_t kan 0 tot 255 weergeven. De standaard legt vast dat een waarde die niet in een integertype zonder teken past, de rest bij deling door 2⁸ = 256 wordt, dus bij optellen met 1 vanaf 250 komt na 255 weer 0. Na 10 verhogingen is het resultaat de rest van 250 + 10 = 260 bij deling door 256, dus 4. Daarentegen is overloop bij rekenen met integertypen met teken ongedefinieerd gedrag.

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over Basis van programmeren in C

  1. unsigned char is 8 bits en int is 32 bits. Wat is de uitvoer als de bovenstaande code wordt uitgevoerd?
  2. uint8_t is een 8-bits integertype zonder teken en int is 32 bits. Wat is het resultaat als de bovenstaande code wordt uitgevoerd?
  3. int en unsigned int zijn 32 bits. Wat is het resultaat als de bovenstaande code wordt uitgevoerd?
  4. unsigned int is 32 bits. Welke beschrijving van het gedrag bij het uitvoeren van de bovenstaande code is juist?
  5. Een programma dat „char c = 200;” instelt en c met %d in printf afdrukt, gaf −56 na compileren en uitvoeren met gcc voor Linux op x86-64, en 200 met gcc voor Linux op Arm. Wat is de reden voor dit verschil?