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?
- A44 44
- B300 44
- 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.