Bitskifte - ändra positionen för bitar i ett maskinord .
De flesta datorer kan inte direkt adressera bitar som finns i grupper om 8, 16, 32 eller 64 bitar i ett maskinord . Det finns många maskininstruktioner för att stödja bitsmanipulation , inklusive olika typer av skift. Alla skift liknar varandra i beteendet hos mellanbitarna, som helt enkelt flyttas åt vänster eller höger med en viss mängd. Men beteendet hos kantbitarna som lämnar ordet och som förekommer i ordet beror på typen av skift.
Inom elektronik utförs bitskift på skiftregister .
Ett skifte där den utgående biten försvinner utan att påverka de återstående bitarna, och bit 0 skrivs i stället för den visade biten .
Ett exempel på hur skiftoperationen fungerar:
I de flesta processorer lagras den utgående biten i bärflaggan . Den här funktionen används ofta när du arbetar med flerbytenummer .
I det här skiftet behandlas ordet inte bara som en grupp av bitar, utan som ett tvåkomplement heltal . När den skiftas åt vänster beter den sig som en logisk växling, när den skiftas åt höger försvinner den utgående biten utan att påverka de återstående bitarna, och biten som motsvarar tecknet sätts i stället för den visade biten.
Ett exempel på skiftoperationen av ett 8-bitars nummer i en direktkod:
Ett exempel på skiftoperationen av ett 8-bitars nummer skrivet i ytterligare upp till 2 kod:
Det är lätt att se att med ett aritmetiskt skifte motsvarar ett vänsterskift multiplikation med 2, och ett högerskift motsvarar division med 2 (i det allmänna fallet, till basen i talsystemet) avrundat till −∞. Till exempel:
1011 = -5 1111 = -1 >>a1 >>a1 ---- ---- 1101 = -3 1111 = -1Kretsimplementeringen av skiftoperationer är mycket enkel. Det är därför dessa operationer rekommenderas att användas för operationer med multiplikation och division av heltal med tal lika med potensen 2 (2, 4, 8, 16, 32, 64, etc.) - såvida inte, naturligtvis, sådan avrundning negativa tal stör inte.
Med detta skift visas den utgående biten i stället för det lediga numret som dök upp i andra änden.
Arkitekturen för många processorer inkluderar en bärflagga (till exempel cfpå x86 ). Denna operation utför en rotation på ( n +1)-bitnumret, bestående av ett register och en bärflagga.
Till exempel, om vi har numret 11111010b i registret, är den cykliska växlingsflaggan åt höger 0.
Bärbitrotationsoperationen används när man arbetar med multibytenummer . I synnerhet, för att högerskifta ett långt nummer med 1, rensa [1] cf (vid en signerad division, skriv den till cfhögordningens bit av högordningens ord) och rotera med ett genom cfvarje ord, med början från toppen. Låt oss till exempel säga att vi har numret 011000111100b som spänner över tre 4-bitars ord:
Var: HI=0110, MED=0011, LO=1100, cf=0 Efter HI-skift: HI=0011, MED=0011, LO=1100, cf=0 Efter MED-skift: HI=0011, MED=0001, LO=1100, cf=1 Efter LO-skift: HI=0011, MED=0001, LO=1110, cf=0Förskjutningar genom flaggregistret med mer än 1 bit används praktiskt taget inte.