Vad är ett aritmetiskt skift?

Ett aritmetiskt skift är ett sätt att multiplicera eller dividera tal. Aritmetiska skift utförs vanligtvis på binära tal. Konceptet är dock tillämpligt på alla numreringsscheman.

Följande är ett exempel med decimaltal som har tio som bas. När 250 aritmetiskt förskjuts åt vänster blir det resulterande talet 2500, vilket är 250 multiplicerat med tio. När 250 representeras med fyra siffror som 4, aritmetiskt förskjuts till höger blir det resulterande talet 0250, vilket är 0025 dividerat med tio. Så det är mer korrekt att säga att ett aritmetiskt skift är ett sätt att multiplicera eller dividera tal med basen i talschemat.

Binära tal har 2 som bas; de representeras med 0:or och 1:or och kan vara signerade eller osignerade. I ett aritmetiskt vänsterskift förskjuts talen ett mellanslag åt vänster med noll till höger. I ett aritmetiskt högerskifte förskjuts talen med ett mellanslag åt höger med talet längst till vänster kvar till vänster. I allmänhet kan ett skift vara för ”n” mellanslag.

I binära tal utan tecken är varje position en potens av 2, så binär 1 är decimal 1, binär 10 är decimal 2, binär 100 är decimal 4, och så vidare. Så 0110 är decimal 6. När ett aritmetiskt vänsterskift utförs blir det resulterande talet 1100 vilket är decimal 12. När ett aritmetiskt högerskift utförs är det resulterande talet 0011 som är decimal 3.

Eftersom tal kan vara både positiva och negativa, används binära tal med tecken där biten längst till vänster är 0 för ett positivt tal eller noll, och 1 för ett negativt tal. För 4-bitars tal är alltså 0111, som är decimal 7, det största positiva talet. Det schema som oftast används för negativa tal har 1111 som decimal -1 och detta går hela vägen ner till 1000, vilket är decimal -8.

Ett aritmetiskt vänsterskift på 1101, till exempel, som är decimal -3, resulterar i 1010, vilket är decimal -6. Ett aritmetiskt högerskifte på 1010, som är decimal -6, resulterar i 1101, vilket är decimal -3. Lägg märke till att biten längst till vänster behålls.
En aritmetisk förskjutning motsvarar inte alltid multiplikation och division för varje tal i talschemat. Det finns begränsningar i vardera änden av nummerschemat. Till exempel ger vänsterförskjutningen av 0111, decimal 7, decimal -2, och högerförskjutning av 1111, decimal -1, ger decimal -1.
Ett aritmetiskt skifte har en inneboende enkelhet och ett skifte är mycket snabbare att genomföra än normal multiplikation och division. Så datorer stödjer denna operation med en relativt enkel mekanism som kallas skiftenhet eller skiftregister. Kunniga programmerare använder denna operation så länge som begränsningarna som nämns ovan antingen undviks eller tas om hand.