Basis van programmeren in C
uint8_t a = 0x0F;
if (~a == 0xF0)
printf("equal\n");
else
printf("not equal\n");uint8_t is een 8-bits integertype zonder teken en int is 32 bits. Wat is het resultaat als de bovenstaande code wordt uitgevoerd?
- Aequal wordt afgedrukt
- BEr ontstaat een compileerfout, omdat ~ niet op een waarde van het type uint8_t mag worden toegepast
- Cnot equal wordt afgedrukt
Antwoord en toelichting tonen
Antwoord: C. not equal wordt afgedrukt
Voordat ~a wordt berekend, wordt a door integerpromotie omgezet naar de int 0x0000000F. Daardoor is ~a niet de 8-bits waarde 0xF0, maar de 32-bits waarde 0xFFFFFFF0 (als int −16), en die is niet gelijk aan 0xF0 (240). Om in 8 bits te vergelijken, wordt eerst teruggezet naar een 8-bits type, zoals in (uint8_t)~a == 0xF0. Deze fout komt vaak voor bij het inverteren en vergelijken van registerwaarden.