Bitove_operacie

5 októbra, 2023 | Posted by doc. Pančík in Hlavná stránka

zdroj: https://en.wikipedia.org/wiki/Bitwise_operation

Bitové posuny upraviť ]

Bitové posuny sa niekedy považujú za bitové operácie, pretože s hodnotou zaobchádzajú skôr ako s radom bitov než s číselnou veličinou. Pri týchto operáciách sa číslice posúvajú alebo posúvajú doľava alebo doprava. Registre v počítačovom procesore majú pevnú šírku, takže niektoré bity budú „posunuté“ z registra na jednom konci, zatiaľ čo rovnaký počet bitov bude „posunutý“ z druhého konca; rozdiely medzi operátormi bitového posunu spočívajú v tom, ako určujú hodnoty posunutých bitov.

Bitové adresovanie upraviť ]

Ak je šírka registra (často 32 alebo dokonca 64) väčšia ako počet bitov (zvyčajne 8) najmenšej adresovateľnej jednotky, často nazývanej bajt, operácie posunu vyvolajú schému adresovania z bajtov na bity. Orientácie „vľavo“ a „vpravo“ sú teda prevzaté zo štandardného zápisu čísel v zápise hodnoty miesta , takže posun doľava sa zvýši a posun doprava zníži hodnotu čísla – ak sa najprv čítajú ľavé číslice, toto tvorí orientáciu big-endian . Bez ohľadu na hraničné efekty na oboch koncoch registra sa aritmetické a logické operácie posunu správajú rovnako a posun o 8 bitových pozícií prenáša bitový vzor o 1 bajtovú pozíciu nasledujúcim spôsobom:

Poradie Little-endian : posun doľava o 8 pozícií zvýši bajtovú adresu o 1,
posun doprava o 8 pozícií zníži bajtovú adresu o 1.
Big-endian zoradenie: posun doľava o 8 pozícií zníži bajtovú adresu o 1,
posun doprava o 8 pozícií zvýši bajtovú adresu o 1.

Aritmetický posun upraviť ]

Ľavý aritmetický posun
Pravý aritmetický posun

Pri aritmetickom posune sa bity, ktoré sú posunuté z ktoréhokoľvek konca, zahodia. Pri ľavom aritmetickom posune sú nuly posunuté vpravo; pri pravom aritmetickom posune sa bit znamienka (MSB v dvojkom doplnku) posunie vľavo, čím sa zachová znamienko operandu.

Tento príklad používa 8-bitový register interpretovaný ako dvojkový doplnok:

   00010111 (desatinné +23) ĽAVÝ POSUN
= 0010111 0 (desatinné +46)
   10010111 (desatinné −105) PRAVÝ POSUN
=   1 1001011 (desatinné −53)

V prvom prípade bola číslica úplne vľavo posunutá za koniec registra a nová 0 bola posunutá do polohy úplne vpravo. V druhom prípade bola 1 úplne vpravo posunutá (možno do vlajky prenášania ) a nová 1 bola skopírovaná do pozície úplne vľavo, pričom sa zachovalo znamienko čísla. Viacnásobné posuny sa niekedy skrátia na jeden posun o určitý počet číslic. Napríklad:

   00010111 (desatinné +23) ĽAVÝ POSUN PO DVOCH
= 010111 00 (desatinné +92)

Ľavý aritmetický posun o n je ekvivalentný násobeniu 2 n (za predpokladu, že hodnota nepretečie ) , zatiaľ čo pravý aritmetický posun o n hodnoty dvojkového doplnku je ekvivalentný násobeniu 2 n . Ak sa s binárnym číslom zaobchádza ako s doplnkom jednotiek , potom rovnaká operácia pravého posunu vedie k deleniu 2 n a zaokrúhleniu smerom k nule .

Logický posun upraviť ]

Logický posun doľava
Správny logický posun

Pri logickom posune sa posúvajú nuly, aby sa nahradili vyradené bity. Preto sú logické a aritmetické posuny doľava úplne rovnaké.

Keďže však logický pravý posun vkladá hodnotu 0 bitov do najvýznamnejšieho bitu, namiesto kopírovania znamienkového bitu je ideálny pre binárne čísla bez znamienka, zatiaľ čo aritmetický pravý posun je ideálny pre binárne čísla s doplnkom dvojky so znamienkom .

Kruhový posun upraviť ]

Ďalšou formou posunu je kruhový posun , bitová rotácia alebo bitová rotácia .

Otočiť upraviť ]

Kruhový posun alebo otočenie doľava
Pravý kruhový posun alebo otočenie

Pri tejto operácii, niekedy nazývanej rotácia bez prenosu , sa bity „otočia“, ako keby sa spojili ľavý a pravý koniec registra. Hodnota, ktorá je posunutá doprava počas ľavého posunu, je akákoľvek hodnota, ktorá bola posunutá vľavo a naopak pre operáciu s posunom vpravo. Je to užitočné, ak je potrebné zachovať všetky existujúce bity a často sa používa v digitálnej kryptografii . potrebné vysvetlenie ]

Otočiť cez prenášanie upraviť ]

Otočiť doľava cez prenášanie
Otočte doprava cez nosenie

Otočiť cez prenášanie je variant operácie otáčania, kde bit, ktorý je posunutý (na jednom konci) je starou hodnotou príznaku prenášania, a bit, ktorý je posunutý von (na druhom konci), sa stáva novou hodnotou nosná vlajka.

Jedno otočenie cez prenášanie môže simulovať logický alebo aritmetický posun o jednu pozíciu vopred nastavením vlajky prenášania. Napríklad, ak príznak prenosu obsahuje 0, potom x RIGHT-ROTATE-THROUGH-CARRY-BY-ONEide o logický posun doprava a ak príznak prenosu obsahuje kópiu znamienkového bitu, ide x RIGHT-ROTATE-THROUGH-CARRY-BY-ONEo aritmetický posun doprava. Z tohto dôvodu sa niektoré mikrokontroléry, ako napríklad low-end PIC , jednoducho otáčajú a otáčajú cez prenášanie a neobťažujú sa aritmetickými alebo logickými pokynmi.

Rotácia cez prenášanie je obzvlášť užitočná pri vykonávaní posunov na číslach väčších, než je natívna veľkosť slova procesora , pretože ak je veľké číslo uložené v dvoch registroch, bit, ktorý je posunutý z jedného konca prvého registra, musí prísť na druhý koniec druhy. Pri rotácii cez prenášanie sa tento bit „uloží“ do príznaku prenášania počas prvej zmeny a je pripravený na zasunutie počas druhej zmeny bez akejkoľvek ďalšej prípravy.

You can follow any responses to this entry through the RSS 2.0 Both comments and pings are currently closed.