Što su bitni operatori?

U računalnom programu, bitni operatori su operatori za manipulaciju bitnim uzorcima u izrazima. Bitno AND, OR, ekskluzivno OR (XOR), NOT, pomak udesno i pomak ulijevo uobičajene su operacije. Većina računalnih programskih jezika uključuje svih šest ovih operatora. Često se koriste za postavljanje, brisanje ili okretanje pojedinačnih bitova u programima koji kontroliraju računalni hardver. Bitovi operatori se također često koriste u algoritmima za šifriranje i kompresiju podataka.

Uobičajeni bitni operatori obično su simbolički predstavljeni u programskim jezicima kao što su C, C++ i Java. Koriste se u izrazima baš kao što bi bili aritmetički operatori poput znakova plus ili minus. Bitni operator AND predstavljen je ampersandom &, OR s cijevi | i XOR sa znakom ^. NOT, također poznat kao operator komplementa, označen je tildom ~.

Operator desnog pomaka koristi dvostruki znak koji pokazuje udesno >>. Za razliku od toga, pomak ulijevo označen je dvostrukim znakom koji pokazuje lijevo. Java uključuje još jednu operaciju pomaka udesno, prikazanu udesno s trostrukim znakom >>>.

Bitni operatori primjenjuju logičku operaciju na svaki par bitova u svojim operandima. NE, desni pomak i lijevi pomak imaju samo jedan pravi operand; druga vrijednost u operacijama pomaka je broj bitova. Kako bi bolje razumjeli kako bitni operatori rade, pojedinac može vizualizirati svoje operande kao binarne brojeve. Na primjer, komplementarni operator okreće svaki bit svog pojedinačnog operanda u suprotno stanje. Jedinica postaje nula, a nula postaje jedinica. Komplement 8-bitne binarne vrijednosti 00110101 je 11001010.

Operator AND ima dva operanda. Bit po bit, logička I operacija se izvodi korištenjem jednog odgovarajućeg bita iz svakog operanda. Ishod svake bitne operacije stavlja se na tu poziciju bita ukupnog rezultata. Na primjer, AND operator će obraditi bit 7 jednog operanda s bitom 7 drugog operanda. Ishod će biti pohranjen u bitu 7 ukupnog rezultata.

U operaciji I, oba bita operanda moraju biti jedinice kako bi rezultat bio jedan, inače je rezultat nula. Na primjer, ako su 8-bitne binarne vrijednosti operanada 00110101 i 11110000, rezultat će biti 00110000. Uobičajena upotreba AND operatora je nuliranje određenih bitova u rezultatu. To se postiže postavljanjem nula na te pozicije bita u jednom od operanada.
U operaciji OR, oba bita operanda moraju biti nula da bi rezultat bio nula; inače, rezultat je jedan. Uobičajena upotreba operatora OR je postavljanje određenih bitova rezultata na jedinice. To se postiže postavljanjem jedinica na te pozicije bita u jednom od operanada. Za operaciju XOR, rezultat je nula ako su oba bita operanda nula ili ako su oba bita operanda jedan – inače, rezultat je jedan.
Lijevi pomak i desni pomak pomiču bitove u operandu lijevo ili desno za određeni broj pozicija bita. Logički desni pomak pomiče nulu u krajnji lijevi bit kao dio pomaka. Aritmetički pomak udesno kopira krajnji lijevi bit—značni bit—prije pomaka u istu poziciju nakon pomaka. Izvorni dio je također pomaknut udesno zajedno s ostatkom. Bilo koja vrsta lijevog pomaka pomiče nulu u krajnji desni bit.
Kada je operand pomaknut udesno, krajnji desni bit prije pomaka jednostavno se odbacuje. Slično, uklanja se krajnji lijevi bit prije pomaka ulijevo. Ne premotava se na drugi kraj operanda.
Operacije bitova pomaka ovise o jeziku i implementaciji. Na primjer, u C i C++, >> i izvedite logičke pomake ako je operand cijeli broj bez predznaka. Ako je operand cijeli broj s predznakom, vjerojatno će se umjesto toga izvršiti aritmetički pomak. U Javi se svi operandi smatraju potpisanim, a aritmetički pomaci se uvijek izvode s >> i . Operator >>> koristi se za logički pomak udesno, ali još uvijek je moguće slučajno napraviti aritmetički pomak udesno umjesto toga bez pažljivog prevođenja.
Komplikacije također mogu nastati kada operandi imaju različite duljine bitova ili kada su neki predpisani, a neki nepotpisani. Bitovi operatori i numeričke konstante u sredini složenog izraza možda se neće procijeniti kako je predviđeno. Mora se paziti da se navede veličina i potpisana/nepotpisana priroda svake količine u izrazu. To se može učiniti pažljivim određivanjem tipova ili privremenim dodjeljivanjem specifičnih tipova varijabli u programskom kodu.