Bitový posun

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 22. března 2015; ověření vyžaduje 41 úprav .

Bitový posun  - změna pozice bitů ve strojovém slově .

Většina počítačů nemůže přímo adresovat bity, které jsou obsaženy ve skupinách po 8, 16, 32 nebo 64 bitech ve strojovém slově . Existuje mnoho strojových instrukcí na podporu bitové manipulace , včetně různých typů posunů. Všechny posuny jsou si navzájem podobné v chování středních bitů, které jsou jednoduše posunuty doleva nebo doprava o určitou hodnotu. Chování okrajových bitů, které opouštějí slovo a které se ve slově objevují, však závisí na typu posunu.

V elektronice se bitové posuny provádějí na posuvných registrech .

Logický posun

Posun, při kterém odchozí bit zmizí, aniž by to ovlivnilo zbývající bity, a bit 0 se zapíše na místo objeveného bitu .

Příklad fungování směnného provozu:

U většiny procesorů je odchozí bit uložen v příznaku přenosu . Tato funkce je široce používána při práci s vícebajtovými čísly .

Aritmetický posun

V tomto posunu se se slovem zachází nejen jako se skupinou bitů, ale jako s celým číslem doplňku dvojky . Při posunutí doleva se chová jako logický posun, při posunutí doprava odchozí bit zmizí, aniž by to ovlivnilo zbývající bity, a na místo objeveného bitu se nastaví bit odpovídající znaménku.

Příklad č. 1

Příklad operace posunu 8bitového čísla v přímém kódu:

Příklad č. 2

Příklad operace posunu 8bitového čísla zapsaného v dodatečném až 2 kódu:

Závěr

Je snadné vidět, že při aritmetickém posunu odpovídá posun vlevo násobení 2 a posun vpravo odpovídá dělení 2 (v obecném případě základu číselné soustavy) zaokrouhleném na −∞. Například:

1011 = -5 1111 = -1 >>a1 >>a1 ---- ---- 1101 = -3 1111 = -1

Obvodová implementace směnových operací je velmi jednoduchá. Proto se tyto operace doporučuje používat pro operace násobení a dělení celých čísel čísly rovnými mocnině 2 (2, 4, 8, 16, 32, 64 atd.) - pokud ovšem takové zaokrouhlování záporných čísel neruší.

Cyklický posun

S tímto posunem se odchozí bit objeví místo volného čísla, které se objevilo na druhém konci.

Příklad

  • Řekněme, že máme číslo 11111010b (v dvojkové soustavě ).
  • Pokud posuneme doleva o 1 bit, dostaneme číslo 11110101b.
  • Pokud původní číslo posuneme o 1 bit doprava, dostaneme číslo 01111101b.

Otočte nosným bitem

Architektura mnoha procesorů obsahuje příznak přenosu (například cfna x86 ). Tato operace provede rotaci na ( n +1)-bitovém čísle, které se skládá z registru a příznaku přenosu.

Pokud máme například v registru číslo 11111010b, příznak přenosu vpravo cyklického posunu je 0.

  • Po posunutí doleva o 1 bit v registru 11110101b je příznak přenosu 1.
  • Dále, po posunutí doprava o 1 bit v registru 01111101b je příznak přenosu 1.

Operace přenos bitové rotace se používá při práci s vícebajtovými čísly . Konkrétně, chcete-li posunout dlouhé číslo o 1 doprava, vymažte [1] cf (v případě dělení se znaménkem jej zapište do cfbitu vyššího řádu slova vyššího řádu) a otočte o jednu přes cfkaždé slovo, počínaje z vrchu. Řekněme například, že máme číslo 011000111100b zahrnující tři 4bitová slova:

Bylo: HI=0110, MED=0011, LO=1100, cf=0 Po HI směně: HI=0011, MED=0011, LO=1100, cf=0 Po posunu MED: HI=0011, MED=0001, LO=1100, cf=1 Po posunu LO: HI=0011, MED=0001, LO=1110, cf=0

Posuny přes příznakový registr o více než 1 bit se prakticky nepoužívají.

Viz také

Poznámky

  1. Namísto vymazání příznaku pro první slovo ke zpracování lze použít aritmetický\logický posun, pokud příznak nastaví na cfhodnotu výstupního bitu.

Odkazy