Basis van programmeren in C

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

unsigned char is 8 bits en int is 32 bits. Wat is de uitvoer als de bovenstaande code wordt uitgevoerd?

  1. A44 44
  2. B300 44
  3. C300 300
Antwoord en toelichting tonen

Antwoord: B. 300 44

In C worden waarden van typen die kleiner zijn dan int (zoals char en short) vóór een berekening naar int omgezet (integerpromotie). Daarom wordt a + b niet in 8 bits maar als int berekend, wat 300 geeft, en krijgt de int s ongewijzigd 300. Bij toekenning aan de 8-bits c wordt de waarde omgezet naar de rest van 300 bij deling door 256, dus 44. Ook op een 8-bits microcontroller worden tussenresultaten in een expressie volgens de standaard met de breedte van int berekend.

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over Basis van programmeren in C

  1. uint8_t is een 8-bits integertype zonder teken en int is 32 bits. Wat is het resultaat als de bovenstaande code wordt uitgevoerd?
  2. int en unsigned int zijn 32 bits. Wat is het resultaat als de bovenstaande code wordt uitgevoerd?
  3. unsigned int is 32 bits. Welke beschrijving van het gedrag bij het uitvoeren van de bovenstaande code is juist?
  4. 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?
  5. Wat is de uitvoer als de bovenstaande code, met b++ aan de rechterkant van && en ||, wordt uitgevoerd?