Computerarithmetiek
Welke combinatie van de resultaten van −7 / 2 en −7 >> 1 (bij rekenkundige verschuiving naar rechts) voor het type int in C is juist?
- A−7 / 2 is −3, −7 >> 1 is −4
- BBeide zijn −4
- C−7 / 2 is −4, −7 >> 1 is −3
Antwoord en toelichting tonen
Antwoord: A. −7 / 2 is −3, −7 >> 1 is −4
Bij deling van gehele getallen in C (vanaf C99) is vastgelegd dat het resultaat in de richting van 0 wordt afgekapt, dus −3,5 wordt −3. Een rekenkundige verschuiving naar rechts werkt daarentegen als afronden naar beneden (naar min oneindig): −7 (1111 1001) 1 bit naar rechts geschoven wordt 1111 1100 = −4. Bij negatieve getallen komen verschuiven en delen dus niet overeen. Wanneer een compiler een deling door 2 door een verschuiving vervangt, voegt hij een correctie-instructie toe voor negatieve getallen. Bij positieve getallen komen beide overeen.