Basis van programmeren in C
int en unsigned int zijn 32 bits. Welke van de volgende bewerkingen is volgens de C-standaard ongedefinieerd gedrag?
- A1 optellen bij een variabele van het type unsigned int waarvan de waarde het maximum 4294967295 is
- BEen negatieve int-waarde met >> 1 bit naar rechts schuiven
- C1 optellen bij een variabele van het type int waarvan de waarde het maximum 2147483647 is
Antwoord en toelichting tonen
Antwoord: C. 1 optellen bij een variabele van het type int waarvan de waarde het maximum 2147483647 is
Een bewerking met integers met teken waarvan het resultaat het weer te geven bereik overschrijdt, zoals 2147483647 + 1 bij int, is ongedefinieerd gedrag. Voor rekenen met integers zonder teken ligt vast dat het resultaat de rest bij deling door 2³² is, dus 4294967295 + 1 geeft 0 en is geen ongedefinieerd gedrag. Een negatieve waarde naar rechts schuiven is door de implementatie bepaald gedrag: de implementatie bepaalt of het een rekenkundige shift of een logische shift is, en gcc gebruikt een rekenkundige shift. Een negatieve waarde naar links schuiven is daarentegen ongedefinieerd gedrag.