Skifta och rotatera bitar

bitar
steg
Riktning: Vänster

Bitskifte innebär att bitarna i ett register flyttas åt höger eller vänster. När bitarna skiftas ett steg kommer den bit som befinner sig längst åt skiftriktningen att falla bort och en ny bit att läggas till på motsatt sida. Det som skiljer de olika skiftoperatorerna är hur de väljer värdet på den bit som läggs till. Processorer kan normalt skifta flera steg åt gången men resultatet blir det samma som om varje skiftsteg hade utförts var för sig.

Logiskt skift

Logiskt vänsterskift
Logiskt högerskift

Vid logiska skift är de bitvärden som läggs till alltid nollor. Det är den vanligaste typen av skift att använda om värdet behandlas som en följd av bitar, och talet som representeras är ointressant.

För positiva heltal är ett steg med logiskt vänsterskift det samma som att multiplicera med två, och logiskt högerskift är det samma som heltalsdivision med två. Genom att utföra skift med flera steg är det alltså möjligt att multiplicera och dividera med 2^n, där n är antalet steg, förutsatt att antalet bitar i registret är tillräckligt många för att resultatet ska få plats. En skiftoperation går vanligtvis snabbare för en processor att utföra jämfört med de vanliga multiplikations- och divisionsoperationerna.

Aritmetiskt skift

Aritmetiskt vänsterskift
Aritmetiskt högerskift

Aritmetiska skift är främst avsett för tal som använder sig av tvåkomplementsform för att representera negativa tal.

Aritmetiskt vänsterskift är identiskt med logiskt vänsterskift och kan användas på samma sätt för att multiplicera, både positiva och negativa tal, med två.

Vid aritmetiskt högerskifte får de bitar som läggs till samma värde som teckenbiten, d.v.s. den bit som befinner sig längst till höger, vilket gör att talet behåller sitt tecken (+/−). Ett steg med aritmetiskt högerskift motsvarar nästan en heltalsdivision med två. Skillnaden är att talet alltid avrundas nedåt istället för mot noll.

Rotation utan carry

Vänsterrotation utan carry
Högerrotation utan carry

Vid rotation utan carry får den bit som läggs till samma värde som den bit som tas bort i motsatt ända. Rotation utan carry används flitigt inom bland annat kryptografin och är en lämplig skiftoperation om man vill att alla bitar ska bevaras.

Rotation med carry

Vänsterrotation med carry
Högerrotation med carry

Den bit som senast togs bort av en skiftoperation sparas vanligtvis i en carry-flagga. Vid rotation med carry används carry-flaggan för att bestämma värdet på den bit som läggs till.

Rotation med carry kan användas för att skifta större tal än vad som ryms i ett register. Om till exempel registerstorleken är 32 bitar, men man vill utföra ett steg med aritmetiskt högerskift på ett 64-bitars tal, kan man använda sig av två register. Först utförs ett aritmetiskt högerskift på det registret som rymmer de mest signifikanta bitarna. Den bit som togs bort kommer efter detta att vara lagrad i carry-flaggan. Sedan utförs en högerrotation med carry på det andra registret för att slutföra skiftet.