Bitove_operacie
5 októbra, 2023 | Posted by in Hlavná stránkazdroj: 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ť ]
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ť ]
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ť ]
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ť 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-ONE
ide o logický posun doprava a ak príznak prenosu obsahuje kópiu znamienkového bitu, ide x RIGHT-ROTATE-THROUGH-CARRY-BY-ONE
o 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.