Bit művelet

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2021. december 16-án felülvizsgált verziótól ; az ellenőrzésekhez 10 szerkesztés szükséges .

A bitenkénti művelet a programozásban  egy bitláncokon végzett művelet , általában ebbe az osztályba tartoznak a logikai bitenkénti műveletek és a biteltolások . A programozási nyelvekben és a digitális technológiában használják , diszkrét matematikában tanulmányozzák .

A bitműveletek a digitális jelfeldolgozás alapját képezik : ezek segítségével a bemeneten egy vagy több jelből új jelet kapunk, amely egy vagy több ilyen művelet bemenetére táplálható. A bitműveletek tárolóelemekkel (például triggerekkel ) kombinálva valósítják meg a modern digitális technológia lehetőségeinek minden gazdagságát.

Bitenkénti műveletek

Az alacsony szintű nyelveken számos forrás a bitenkénti logikai műveleteket egyszerűen logikainak nevezi [1] [2] , de a magas szintű nyelvek programozásának terminológiájában a bitenkénti műveletek nevei bitenkénti , bitenkénti mellékneveket tartalmaznak (például: „bitenkénti logikai ÉS ”, ez is „bitenkénti szorzás”), bitenkénti .

Egyes programozási nyelvekben a logikai és bitenkénti logikai műveleteknek megfelelő operátorok nevei hasonlóak. Ezenkívül a programozási nyelv lehetővé teheti a numerikus típusok implicit konverzióját logikai típussá és fordítva. Az ilyen programozási nyelvekben ügyelni kell a logikai és bitenkénti műveletek használatára, amelyek keverése hibákhoz vezethet. Például a C++ nyelvben a "2 && 1" ( logikai ÉS ) kifejezés eredménye a true logikai érték , a "2 & 1" ( bitenkénti ÉS ) kifejezés eredménye pedig a 0 egész érték .

Bitenkénti negáció

A bitenkénti negáció (vagy bitenkénti NEM , komplementer ) egy unáris művelet , amelynek művelete egyenértékű azzal, hogyaz operandus bináris reprezentációjának minden bitjére logikai negációt alkalmazunk. Más szóval, azon a helyen, ahol az operandus bináris reprezentációjában 0 volt, az eredmény 1 lesz, és fordítva, ahol 1 volt, ott 0 lesz. Például:

NEM 01
tíz

Bitenként ÉS

A bitenkénti „ÉS”  egy bináris művelet , amelynek művelete egyenértékű azzal, hogy logikai „ÉS”-t alkalmazunk minden olyan bitpárra, amelyek az operandusok bináris megjelenítésében azonos pozícióban vannak. Más szóval, ha az operandusok mindkét megfelelő bitje 1, az eredményül kapott bit 1; ha a pár legalább egy bitje 0, az eredményül kapott bit 0.

Példa:

És 0011
0101
0001

Bitenként VAGY

A bitenkénti VAGY  egy bináris művelet, amely egyenértékű azzal, hogy logikai VAGY -ot alkalmazunk minden olyan bitpárra, amelyek azonos pozícióval rendelkeznek az operandusok bináris megjelenítésében. Más szóval, ha az operandusok mindkét megfelelő bitje 0, az eredmény bináris bitje 0; ha a pár legalább egy bitje 1, akkor az eredmény bináris bitje 1.

Példa:

VAGY 0011
0101
0111

Bitenkénti XOR

A bitenkénti exkluzív VAGY (modulo 2 addíció) egy bináris művelet, amelynek működése egyenértékű azzal, hogy minden egyes bitpárra logikai exkluzív VAGY -ot alkalmazunk , amelyek azonos pozícióban vannak az operandusok bináris megjelenítésében. Más szóval, ha az operandusok mindkét megfelelő bitje egyenlő egymással, az eredmény bináris bitje 0; ellenkező esetben az eredmény bináris számjegye 1.

Példa:

Excl. VAGY 0011
0101
0110

A művelet első orosz neve annak a ténynek köszönhető, hogy ennek a műveletnek az eredménye a 4 bemeneti esetből csak egy esetben tér el az "OR" eredményétől - mindkettő 1 (az argumentumok egyidejű igazságának esete "kizárt" "). Még az orosz nyelvtanban is ennek a logikai kapcsolónak a jelentését a „vagy” unió közvetíti.

A második név az, ami valóban összeadás a modulo two maradékok gyűrűjében , amiből néhány érdekes tulajdonság következik. Például a fenti „ÉS” és „VAGY”-tól eltérően ez a művelet visszafordítható: .

A számítógépes grafikában az "addition modulo two" kifejezést használják, amikor sprite -okat jelenítenek meg a képen - ismételt alkalmazása eltávolítja a sprite-ot a képről. Az involutivitás miatt ugyanaz a művelet talált alkalmazásra a kriptográfiában, mint egy abszolút biztonságos titkosítás ( Vernam cipher ) legegyszerűbb megvalósítása. A "Modulo two addíció" két változó cseréjére is használható az XOR cserealgoritmus segítségével .

Ezt a műveletet „maszk inverziónak” is nevezhetjük, vagyis a maszk 1-jével megegyező biteket az eredeti bináris számból invertáljuk.

Az általános programozási nyelvekben csak négy bitenkénti logikai műveletet valósítanak meg a beépített eszközök: ÉS, VAGY, NEM és XOR . Egy tetszőleges bitenkénti logikai művelet megadásához a felsoroltak bőven elegendőek, sőt, ahogy a Boole-függvények elméletéből következik, az alapműveletek még kisebb halmazára szorítkozhatunk. Vannak olyan programozási nyelvek is, amelyekben beépített lehetőség van bármilyen bináris logikai művelet bitenkénti végrehajtására. Például a PL/I -nek van egy beépített BOOL függvénye, amelynek harmadik argumentuma egy tetszőleges logikai művelet megadása, amelyet bitenként kell alkalmazni az első két argumentumra [3] .

Biteltolások

A bitenkénti műveletek biteltolásokat is tartalmaznak. Eltoláskor a bitértékek átmásolódnak a szomszédos értékekre az eltolás irányában. Az extrém bitek feldolgozásától függően többféle eltolás létezik - logikai , aritmetikai és ciklikus .

Létezik továbbá balra (a legkisebb jelentőségű bittől a legjelentősebbig) és jobbra (a legjelentősebb bittől a legkisebb jelentőségűig) történő eltolás is.

Logikai eltolás

A logikai eltolás során az utolsó bit értéke az eltolás irányában elvész (átmásolódik a hordozóbitre), és az első bit nullává válik.

Aritmetikai eltolás

Az aritmetikai eltolás hasonló a logikai eltoláshoz, de a szám előjeles számnak minősül, amelyet egy kiegészítő kódban ábrázolnak. Tehát jobbra tolással a legjelentősebb bit megtartja értékét. A balra történő aritmetikai eltolás megegyezik a logikaival.

Az aritmetikai bal és jobb eltolás a gyors szorzáshoz és 2-vel való osztáshoz használható.

Ciklikus váltás

A forgatás során az utolsó bit értéke az eltolás irányában az első bitre kerül (és a hordozóbitre).

Létezik ciklikus eltolás is a hordozóbiten keresztül  - amelyben az eltolás irányába eső első bit a hordozóbittől kapja az értéket, az utolsó bit értéke pedig a hordozóbitbe tolódik el.

Programozási nyelveken

Beépített operátorok és függvények, amelyek bitenkénti logikai műveleteket valósítanak meg bizonyos programozási nyelvekben:

Nyelv NEM És VAGY Excl. VAGY Váltás balra váltson jobbra Egyéb
C , C++ , Java [4] , C# , Ruby , Python , JavaScript ~ & | ^ << >>
Pascal [5] nem és vagy xor shl shr
Kotlin [6] inv
PL/1 [7] ÉN NEM ÉN ÉS ÉN VAGY IEOR BOOL
¬ & | ¬
Prológus [8] \ /\ \/

2-adikus értelmezés

Egy végtelen (kettős komplementerben) bináris regiszterbe írt egész szám a p-adikus számok elméletének természetes objektuma . A 2-adikus egész számok halmaza (vagyis tetszőleges végtelen bitsorozatok) Boole-algebraként tekinthető, akárcsak egy véges hosszúságú bitregiszter értékkészlete. A fenti bitenkénti műveletek mindegyike folyamatos leképezésnek bizonyul . Bár a gyakorlati programozás nem rendelkezik végtelen hosszúságú regiszterekkel, ez nem akadályozza meg ennek az elméleti ténynek a kriptográfiában való felhasználását nagy sebességű titkosítási algoritmusok létrehozására.

Gyakorlati alkalmazások

Bitműveletek fizikai megvalósítása

A bitműveletek megvalósítása elvileg bármilyen lehet: mechanikus (beleértve a hidraulikus és pneumatikus), kémiai, termikus, [9] elektromos, mágneses és elektromágneses (tartományok - IR, látható optikai, UV, és tovább a hullámhosszok csökkenő sorrendjében ), valamint kombinációk formájában, például elektromechanikus .

A 20. század első felében, a tranzisztorok feltalálása előtt , elektromechanikus reléket és vákuumcsöveket használtak .

Tűz- és robbanásveszélyes körülmények között továbbra is pneumatikus logikai eszközöket (pneumonikot) használnak.

A tranzisztorokat használó bitműveletek leggyakoribb elektronikus megvalósításai , például ellenállás-tranzisztor logika (RTL), dióda-tranzisztor logika (DTL), emitter-csatolt logika (ECL), tranzisztor-tranzisztor logika (TTL), N-MOS logika , CMOS -logika stb.

A kvantumszámítástechnikában a felsorolt ​​Boole-műveletek közül csak NEM és nem. VAGY (némi fenntartással). Az ÉS, VAGY stb.-nek nincsenek kvantumanalógjai.

Hardver logikai diagramok

A VAGY-NEM vagy VAGY művelet eredménye egy bináris regiszter összes bitjén ellenőrzi, hogy a regiszter értéke nulla-e; ugyanaz, a kilépésből átvéve, kivéve VAGY két regiszterből ellenőrzi értékük egyenlőségét egymás között.

A bitműveleteket karaktergenerátorokban és grafikus adapterekben használják .

Használata a programozásban

A processzor aritmetikai logikai egységében ( ALU ) való megvalósítás révén sok regiszterbites művelet elérhető a hardverben alacsony szintű nyelveken . A legtöbb processzor egy regisztert NEM utasításként valósít meg; regiszter kétargumentumú ÉS, VAGY, XOR; nulla egyenlőség-ellenőrzés (lásd fent); háromféle biteltolás, valamint ciklikus biteltolódás.

Az ÉS regiszter művelet a következőkre szolgál:

A regiszter VAGY művelet a következőkre szolgál:

A regiszter XOR művelete egy maszkkal ellátott regiszter bitjeinek invertálására szolgál.

A balra és jobbra történő eltolás a 2-vel való szorzásra, az egész szám 2-vel való osztása, valamint az egyes bitek kivonására szolgál.

Így például az internetes hálózati technológiákban az IP-cím értéke és az alhálózati maszk értéke közötti ÉS műveletet használják annak meghatározására, hogy egy adott cím egy alhálózathoz tartozik-e.

Jegyzetek

  1. A 8086-os mikroprocesszor összeállítási nyelve . Letöltve: 2010. január 19. Az eredetiből archiválva : 2013. január 26..
  2. Szorzás és osztás // A Turbo Assembler programozási rendszer kézikönyve / Szerk. S. B. Orlova.
  3. PL/I nyelvi referencia archiválva : 2018. szeptember 25., a Wayback Machine -nél  - p. 393
  4. A Java nyelvi specifikáció. Integer Operations . Hozzáférés dátuma: 2010. január 17. Az eredetiből archiválva : 2012. február 28.
  5. Free Pascal: Útmutató. Logikai operátorok . Letöltve: 2018. május 20. Az eredetiből archiválva : 2018. május 21.
  6. Alaptípusok – Kotlin programozási nyelv . Kotlin. Letöltve: 2017. január 2. Az eredetiből archiválva : 2017. január 2..
  7. PL/I nyelvi referencia . Letöltve: 2010. január 17. Az eredetiből archiválva : 2018. szeptember 25.
  8. GNU-Prolog kézikönyv. Aritmetika . Hozzáférés dátuma: 2010. január 18. Az eredetiből archiválva : 2010. január 23.
  9. ↑ Létrejött egy logikai kapu a termikus számítógéphez  // Lenta.ru . - Probléma. 2007.11.05 .