Bitu nobīde

Vikipēdijas raksts
Pārlēkt uz: navigācija, meklēt

Bitu nobīde dažreiz tiek saukta par bitu kārtas operācijām, tā kā tās darbojas ar vesela skaitļa bināro attēlojumu nevis tā skaitlisko vērtību; tomēr, bitu nobīde nedarbojas uz attiecīgo bitu pāriem, un tādēļ nebūtu pareizi tās saukt par bitu kārtu operācijām. Veicot šo operāciju, cipari tiek pārvietoti vai nobīdīti pa kreisi vai labi. Datora procesora reģistriem ir nemainīgs pieejamo bitu skaits skaitļu uzglabāšanai, tādējādi daži biti tiek „pārbīdīti ārā” no reģistriem vienā galā , kamēr otrā galā tāds pats bitu skaits tiek „nobīdīts iekšā”; atšķirības starp bitu nobīdes operatoriem slēpjas veidā, kā tie izskaitļo iebīdīto bitu vērtības.

Aritmētiskās nobīdes[izmainīt šo sadaļu | labot pirmkodu]

Aritmētiskajās nobīdēs biti, kuri tiek pārbīdīti ārā katra beigās, tiek izbrāķēti. Aritmētiskajā nobīdē pa kreisi, nulles tiek iebīdītas no labās puses; aritmētiskajā nobīdē pa labi, zīmes bits tiek iebīdīts no kreisās puses, tādējādi saglabājot operanda zīmi. Šim piemēram ir nepieciešams 8 bitu reģistrs:

Pirmajā gadījumā, kreisajā pusē esošais pirmais cipars tika nobīdīts reģistra beigās un tā vietā tika iebīdīta 0 pēdējā pozīcijā no labās puses. Otrajā gadījumā, labajā pusē esošais pirmais cipars 1 tika pārbīdīts ārā (iespējams, ka pārbīdīts uz pārneses karodziņu) un jauna 0 tika ierakstīta kreisajā pusē esošajā pirmajā pozīcijā, saglabājot cipara zīmi. Saliktas nobīdes dažreiz tiek samazinātas uz vienu nobīdi, izmantojot dažus ciparus. Aritmētiskā nobīde pa kreisi, izmantojot n ir ekvivalents reizinājumam ar 2n (paredzot, ka tā vērtība neizraisīs pārpildi), turpretim aritmētiskā nobīde pa labi, izmantojot n no otrā papildinājuma vērtības ir ekvivalents dalījumam ar 2n un noapaļošanu uz negatīvu bezgalību. Ja binārais skaitlis ir apstrādāts kā pirmā papildinājums, tad tā pati labās — nobīdes operācija izpildās, dalot ar 2n un noapaļojot aptuveni uz nulli.

Loģiskās nobīdes[izmainīt šo sadaļu | labot pirmkodu]

Loģiskajās nobīdēs biti, kuri tiek pārbīdīti ārā, tiek izbrāķēti un to vietā tiek iebīdītas nulles (katras rindas beigās). Tādēļ loģiskās un aritmētiskās kreisās — nobīdes operācijas ir vienādas. Tomēr loģiskā labā — nobīde ievieto bitu ar vērtību 0, tā vietā, lai kopētu zīmju bitu. Tādēļ loģiskās nobīdes ir piemērotas bez zīmju binārajiem skaitļiem, kamēr aritmētiskās nobīdes ir piemērotas otrā papildinājuma binārajam skaitlim ar zīmi.

Rotēšana bez pārneses[izmainīt šo sadaļu | labot pirmkodu]

Cita nobīdes forma ir cirkulējošās nobīdes jeb bitu rotācija. Šajā operācijā biti „rotē” it kā reģistra kreisais un labais gals būtu savienoti. Vērtība, kura tiek iebīdīta no labās puses ir tā pati vērtība, kuru pieņēma kreisā — nobīde, kas tika pārbīdīta ārā pa kreisi un tādējādi defekts tika apiets. Šāda veida operācija ir noderīga, ja ir nepieciešams saglabāt visus esošos bitus, un tā tiek bieži lietota digitālajā kriptogrāfijā.

Rotēšana ar pārnesi[izmainīt šo sadaļu | labot pirmkodu]

Rotēšana ar pārnesi ir līdzīga rotēšanai bez pārneses, atšķirība ir tā, ka reģistra divi gali tiek uzskatīti par atdalītiem ar pārneses karodziņiem. Iebīdītais bits (katrā galā) ir pārneses karodziņa iepriekšējā vērtība un bits, kurš tiek pārbīdīts ārā (otrā galā), kļūst par pārneses karodziņa jauno vērtību. Vienu rotēšanu ar pārnesi var simulēt vienas pozīcijas loģisko vai aritmētisko nobīdi, iepriekš uzstādot pārneses karodziņu. Piemēram, ja pārneses karodziņš satur 0, tad x Labā — Rotēšana — Ar — Pārnesi — Pa — Vienam ir loģiskā labā — nobīde, bet ja pārneses karodziņš satur zīmes bita kopiju, tad x Labā — Rotēšana — Ar — Pārnesi — Pa — Vienam ir aritmētiskā labā — nobīde. Šī iemesla dēļ daži mikrokontrolieri veic rotēšanu un rotēšanu ar pārnesi un tiem nav nepieciešamas aritmētiskās vai loģiskās nobīdes instrukcijas. Rotēšana ar pārnesi ir sevišķi noderīga, kad tiek veiktas nobīdes ar skaitļiem, kuri ir lielāki nekā procesora standarta vārdu izmērs, jo, ja liels skaitlis tiks saglabāts divos reģistros, bits, kurš tiek pārbīdīts ārā no pirmā reģistra, iebīdīsies otrā reģistra beigās. Izmantojot rotēšanu ar pārnesi, bits tiek „saglabāts” pārneses karodziņā, veicot pirmo nobīdi, ir iespējams veikt nobīdi otrās nobīdes laikā bez jebkādas papildus sagatavošanas.

Atsauces[izmainīt šo sadaļu | labot pirmkodu]