Wat is een rekenkundige verschuiving?
Een rekenkundige verschuiving is een manier om getallen te vermenigvuldigen of te delen. Rekenkundige verschuivingen worden meestal uitgevoerd op binaire getallen. Het concept is echter van toepassing op elk nummeringsschema.
Het volgende is een voorbeeld met decimale getallen die tien als basis hebben. Wanneer 250 rekenkundig naar links wordt verschoven, is het resulterende getal 2500, wat 250 is vermenigvuldigd met tien. Wanneer 250 wordt weergegeven met 4 cijfers als 0250, wordt het rekenkundig getal naar rechts verschoven, is het resulterende nummer 0025, wat 250 is gedeeld door tien. Het is dus juister om te zeggen dat een rekenkundige verschuiving een manier is om getallen te vermenigvuldigen of te delen door de basis van het getallenstelsel.
Binaire getallen hebben 2 als basis; ze worden weergegeven met behulp van nullen en enen en kunnen worden ondertekend of niet-ondertekend. In een rekenkundige linkerverschuiving worden de getallen één spatie naar links verschoven, waarbij nul aan de rechterkant wordt geplaatst. In een rekenkundige rechterverschuiving worden de getallen één spatie naar rechts verschoven, waarbij het meest linkse getal links wordt behouden. Over het algemeen kan een verschuiving plaatsvinden voor "n" -spaties.
In niet-ondertekende binaire getallen is elke positie een macht van 2, dus binair 1 is decimaal 1, binair 10 is decimaal 2, binair 100 is decimaal 4, enzovoort. Dus 0110 is decimaal 6. Wanneer een rekenkundige linkerverschuiving wordt uitgevoerd, is het resulterende getal 1100, wat decimaal 12 is. Wanneer een rekenkundige rechtsverschuiving wordt uitgevoerd, is het resulterende getal 0011, dat decimaal 3 is.
Omdat getallen zowel positief als negatief kunnen zijn, worden getekende binaire getallen gebruikt waarbij het meest linkse bit 0 is voor een positief getal of nul, en 1 voor een negatief getal. Dus voor 4-bit getallen is 0111, wat decimaal 7 is, het grootste positieve getal. Het schema dat het meest wordt gebruikt voor negatieve getallen heeft 1111 als decimaal -1 en dit gaat helemaal tot 1000, wat decimaal -8 is.
Een rekenkundige linkerverschuiving op 1101, bijvoorbeeld, is decimaal -3, resulteert in 1010, wat decimaal -6 is. Een rekenkundige rechtsverschuiving op 1010, die decimaal -6 is, resulteert in 1101, die decimaal -3 is. Merk op dat het meest linkse bit behouden blijft.
Een rekenkundige verschuiving komt niet altijd overeen met vermenigvuldiging en deling voor elk getal in het getallenschema. Er zijn beperkingen aan beide uiteinden van het nummerschema. De linkerverschuiving van 0111, decimaal 7, geeft bijvoorbeeld decimaal -2 en de rechterverschuiving van 1111, decimaal -1, geeft decimaal -1.
Een rekenkundige verschuiving heeft een inherente eenvoud en een verschuiving is veel sneller uit te voeren dan normale vermenigvuldiging en deling. Dus computers ondersteunen deze bewerking met behulp van een relatief eenvoudig mechanisme genaamd een shift-eenheid of schuifregister. Slimme programmeurs gebruiken deze bewerking zolang de bovengenoemde beperkingen worden vermeden of opgevangen.