Bit shift - ændring af bits positioner i et maskinord .
De fleste computere kan ikke direkte adressere bit, der er indeholdt i grupper på 8, 16, 32 eller 64 bit i et maskinord . Der er mange maskininstruktioner til at understøtte bitmanipulation , herunder forskellige typer skift. Alle skift ligner hinanden i opførselen af de midterste bits, som blot flyttes til venstre eller højre med en vis mængde. Dog afhænger opførselen af kantbits, der forlader ordet, og som optræder i ordet, af typen af skift.
I elektronik udføres bitskift på skifteregistre .
Et skift, hvor den udgående bit forsvinder uden at påvirke de resterende bit, og bit 0 skrives i stedet for den viste bit .
Et eksempel på, hvordan skiftoperationen fungerer:
I de fleste processorer er den udgående bit gemt i bæreflaget . Denne funktion er meget brugt, når du arbejder med multibyte-tal .
I dette skift behandles ordet ikke kun som en gruppe af bits, men som et to- komplement heltal . Når den flyttes til venstre, opfører den sig som et logisk skift, når den flyttes til højre, forsvinder den udgående bit uden at påvirke de resterende bits, og den bit, der svarer til tegnet, sættes i stedet for den viste bit.
Et eksempel på skiftoperationen af et 8-bit tal i en direkte kode:
Et eksempel på skiftoperationen af et 8-bit tal skrevet i en yderligere op til 2 kode:
Det er let at se, at med et aritmetisk skift svarer et venstreskift til multiplikation med 2, og et højreskift svarer til division med 2 (i det generelle tilfælde til grunden af talsystemet) afrundet til −∞. For eksempel:
1011 = -5 1111 = -1 >>a1 >>a1 ---- ---- 1101 = -3 1111 = -1Kredsløbsimplementeringen af skiftoperationer er meget enkel. Det er grunden til, at disse operationer anbefales at blive brugt til operationer med multiplikation og division af heltal med tal svarende til potensen 2 (2, 4, 8, 16, 32, 64 osv.) - medmindre, selvfølgelig, en sådan afrunding negative tal forstyrrer ikke.
Med dette skift vises den udgående bit i stedet for det ledige nummer, der dukkede op i den anden ende.
Arkitekturen af mange processorer inkluderer et bæreflag (for eksempel cfpå x86 ). Denne operation udfører en rotation på ( n +1)-bit-tallet, der består af et register og et bæreflag.
For eksempel, hvis vi har tallet 11111010b i registret, er det cykliske skift til højre bæreflag 0.
Bærebitrotationsoperationen bruges, når der arbejdes med multibyte-tal . Især, for at højreforskyde et langt tal med 1, skal du slette [1] cf (i tilfælde af en fortegnsdeling, skriv det til den cfhøje ordens bit af ordet af høj orden) og roter med én gennem cfhvert ord, startende fra toppen. Lad os f.eks. sige, at vi har tallet 011000111100b, der spænder over tre 4-bit 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, jf. Efter LO-skift: HI=0011, MED=0001, LO=1110, jf.=0Skift gennem flagregisteret med mere end 1 bit bruges praktisk talt ikke.