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?

  1. A−7 / 2 is −3, −7 >> 1 is −4
  2. BBeide zijn −4
  3. 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.

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over Computerarithmetiek

  1. Wat is in C het resultaat van het aftrekken van 1 van 0 bij een niet-ondertekend 32-bits geheel getal (unsigned int)?
  2. Hoe wordt bij de optelling van niet-ondertekende gehele getallen vastgesteld dat het resultaat buiten het weer te geven bereik valt (overflow)?
  3. Welke uitspraak over de afstand tussen naburige weer te geven waarden van drijvendekommagetallen is juist?
  4. Wat is de bovengrens, beginnend bij 0, tot waar alle gehele getallen exact kunnen worden weergegeven in een IEEE 754-drijvendekommagetal met enkele precisie?
  5. Wat is de belangrijkste reden dat bedragen vaak worden verwerkt als gehele getallen met de kleinste eenheid (1 yen of 1 cent) als 1, in plaats van als binaire drijvendekommagetallen?