Bitskifte

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 22. marts 2015; verifikation kræver 41 redigeringer .

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 .

Logisk skift

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 .

Aritmetisk skift

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.

Eksempel #1

Et eksempel på skiftoperationen af ​​et 8-bit tal i en direkte kode:

Eksempel #2

Et eksempel på skiftoperationen af ​​et 8-bit tal skrevet i en yderligere op til 2 kode:

Konklusion

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 = -1

Kredslø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.

Cyklisk skift

Med dette skift vises den udgående bit i stedet for det ledige nummer, der dukkede op i den anden ende.

Eksempel

  • Lad os sige, at vi har tallet 11111010b (i binær ).
  • Hvis vi skifter 1 bit til venstre, får vi tallet 11110101b.
  • Hvis vi flytter det oprindelige tal til højre med 1 bit, får vi tallet 01111101b.

Drej gennem bærebitten

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.

  • Efter skift til venstre med 1 bit i register 11110101b er bæreflaget 1.
  • Dernæst, efter skift til højre med 1 bit i register 01111101b, er bæreflaget 1.

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.=0

Skift gennem flagregisteret med mere end 1 bit bruges praktisk talt ikke.

Se også

Noter

  1. I stedet for at slette flaget for det første ord, der skal behandles, kan et aritmetisk\logisk skift bruges, hvis det sætter flaget til cfværdien af ​​outputbitten.

Links