Kaj so bitni operaterji?

V računalniškem programu so bitni operaterji operaterji za manipulacijo bitnih vzorcev v izrazih. Pobitno IN, ALI, izključno ALI (XOR), NE, desni premik in levi premik so običajne operacije. Večina računalniških programskih jezikov vključuje vseh šest teh operaterjev. Pogosto se uporabljajo za nastavitev, brisanje ali obračanje posameznih bitov v programih, ki nadzorujejo računalniško strojno opremo. Bitni operaterji se pogosto uporabljajo tudi v algoritmih za šifriranje in stiskanje podatkov.

Običajni bitni operatorji so običajno predstavljeni simbolno v programskih jezikih, kot so C, C++ in Java. Uporabljajo se v izrazih tako kot bi bili aritmetični operatorji, kot so znaki plus ali minus. Bitni operator AND je predstavljen z ampersandom &, ALI z cevjo | in XOR z znakom ^. NOT, znan tudi kot operator komplementa, je označen s tildo ~.

Operater premika v desno uporablja dvojno kazalko, ki kaže v desno >>. Nasprotno pa je premik v levo označen z levo usmerjenim dvojnim kazalcem. Java vključuje še eno operacijo premika v desno, ki je prikazana z desno usmerjeno trojno smernico >>>.

Bitni operaterji uporabijo logično operacijo za vsak par bitov v svojih operandih. NE, desni premik in levi premik imata samo en pravi operand; druga vrednost v operacijah premika je število bitov. Za boljše razumevanje delovanja bitnih operaterjev lahko posameznik vizualizira svoje operande kot binarne številke. Operater komplementa na primer obrne vsak bit svojega posameznega operanda v nasprotno stanje. Enica postane ničla in ničla postane ena. Dopolnilo 8-bitne binarne vrednosti 00110101 je 11001010.

Operater AND ima dva operanda. Bit za bitom se izvede logična operacija IN z uporabo enega ustreznega bita iz vsakega operanda. Rezultat vsake bitne operacije je postavljen na ta bitni položaj celotnega rezultata. Operater AND bo na primer obdelal bit 7 enega operanda z bitom 7 drugega operanda. Rezultat bo shranjen v bitu 7 skupnega rezultata.

V operaciji IN morata biti oba operandna bita ena, da je rezultat ena, sicer je rezultat nič. Na primer, če sta 8-bitni binarni vrednosti operandov 00110101 in 11110000, bo rezultat 00110000. Običajna uporaba operatorja AND je izničenje določenih bitov v rezultatu. To se naredi tako, da se na te bitne položaje v enem od operandov postavijo ničle.
V operaciji ALI morata biti oba operandna bita nič, da je rezultat nič; drugače je rezultat en. Običajna uporaba operatorja OR je nastavitev določenih bitov rezultata na enote. To naredimo tako, da jih postavimo na te bitne položaje v enem od operandov. Za operacijo XOR je rezultat nič, če sta oba operandna bita nič ali če sta oba operandna bita ena – v nasprotnem primeru je rezultat ena.
Levi premik in desni premik premakneta bite v operandu levo ali desno za določeno število bitnih položajev. Logični desni premik premakne ničlo v skrajni levi bit kot del premika. Aritmetični desni premik kopira skrajni levi bit – predznak – pred premikom v isti položaj po premiku. Prvotni del je tudi premaknjen v desno skupaj z ostalimi. Vsaka vrsta levega premika premakne ničlo v skrajni desni bit.
Ko je operand premaknjen v desno, se skrajni desni bit pred premikom preprosto vrže stran. Podobno se odstrani skrajni levi del pred levim premikom. Ne ovije se na drugi konec operanda.
Operacije bitnega premika so odvisne od jezika in izvedbe. Na primer, v C in C++ >> in izvedite logične premike, če je operand nepodpisano celo število. Če je operand predpisano celo število, je verjetno, da bo namesto tega opravljen aritmetični premik. V Javi se vsi operandi štejejo za predpisani, aritmetični premiki pa se vedno izvajajo s >> in . Operater >>> se uporablja za logični premik v desno, vendar je še vedno mogoče naključno izvesti aritmetični desni premik brez previdnega vnašanja.
Zapleti lahko nastanejo tudi, če imajo operandi različne bitne dolžine ali ko so nekateri predpisani in nekateri nepodpisani. Bitni operaterji in številske konstante v sredini kompleksnega izraza morda ne bodo ocenjeni, kot je bilo pričakovano. Paziti je treba na določitev velikosti in podpisane/nepodpisane narave vsake količine v izrazu. To je mogoče storiti s skrbnim razporeditvijo tipov ali vmesnimi dodelitvami določenim vrstam spremenljivk v programski kodi.