Mitä ovat Bitwise -operaattorit?

Tietokoneohjelmassa bittikohtaiset operaattorit ovat operaattoreita manipuloimaan lausekkeiden bittikuvioita. Bittikohtainen JA, TAI, yksinomainen TAI (XOR), EI, oikea siirto ja vasen siirto ovat yleisiä toimintoja. Useimmat tietokoneohjelmointikielet sisältävät kaikki nämä kuusi operaattoria. Niitä käytetään usein yksittäisten bittien asettamiseen, tyhjentämiseen tai kääntämiseen tietokonelaitteistoa ohjaavissa ohjelmissa. Bittikohtaisia ​​operaattoreita käytetään myös usein tietojen salaus- ja pakkausalgoritmeissa.

Yleiset bittioperaattorit esitetään yleensä symbolisesti ohjelmointikielillä, kuten C, C ++ ja Java. Niitä käytetään lausekkeissa aivan kuten aritmeettisia operaattoreita, kuten plus- tai miinusmerkkejä. Bittikohtainen operaattori AND on merkitty & -merkillä &, TAI putkella | ja XOR caretin kanssa ^. EI, joka tunnetaan myös nimellä komplementtioperaattori, on merkitty tildellä ~.

Oikea vaihdeoperaattori käyttää kaksoiskehystä, joka osoittaa oikealle >>. Sen sijaan vasen siirto ilmaistaan ​​vasemmalle osoittavalla kaksoiskappaleella. Java sisältää toisen oikeanpuoleisen siirtotoiminnon, joka näkyy oikealle osoittavan kolmoiskehyksen kanssa >>>.

Bittikohtaiset operaattorit käyttävät loogista operaatiota jokaiselle bittiparille operandissaan. EI, oikealla ja vasemmalla siirtymällä on vain yksi oikea operandi; toinen arvo vuorotoiminnoissa on bittiluku. Ymmärtääkseen paremmin bittikohtaiset operaattorit, henkilö voi visualisoida operandinsa binäärilukuina. Esimerkiksi komplementtioperaattori kääntää yksittäisen operandinsa jokaisen bitin vastakkaiseen tilaan. Yhdestä tulee nolla ja nollasta tulee yksi. 8-bittisen binääriarvon 00110101 täydennysosa on 11001010.

AND -operaattorilla on kaksi operandia. Bitti kerrallaan suoritetaan looginen AND -operaatio käyttäen yhtä vastaavaa bittiä kustakin operandista. Jokaisen bittitoiminnon tulos sijoitetaan siihen kokonaistuloksen bittikohtaan. Esimerkiksi AND -operaattori käsittelee yhden operandin bitin 7 toisen operandin bitin 7 kanssa. Tulos tallennetaan kokonaistuloksen bittiin 7.

AND -operaatiossa molempien operandibittien on oltava yhtä, jotta tulos olisi yksi, muuten tulos on nolla. Jos esimerkiksi operandien 8-bittiset binaariarvot ovat 00110101 ja 11110000, tulos on 00110000. AND-operaattorin yleinen käyttö on nollata tietyt bitit tuloksessa. Tämä tehdään asettamalla nollat ​​bittikohtiin yhdessä operandista.
TAI -operaatiossa molempien operandibittien on oltava nollia, jotta tulos olisi nolla; muuten tulos on yksi. TAI -operaattorin yleinen käyttö on asettaa tietyt tuloksen bitit yhdeksi. Tämä tehdään asettamalla bittiasemat yhdelle operandista. XOR -toiminnon tulos on nolla, jos molemmat operandibitit ovat nolla tai jos molemmat operandibitit ovat yksi – muuten tulos on yksi.
Vasen siirto ja oikea siirto siirtävät operandin bittejä vasemmalle tai oikealle määrätyllä määrällä bittikohtia. Looginen oikea siirto siirtää nollan vasempaan bittiin osana siirtoa. Aritmeettinen oikea siirto kopioi vasemmanpuoleisen bitin – merkkibitin – ennen siirtoa samaan asentoon siirron jälkeen. Alkuperäinen bitti on myös siirretty oikein yhdessä muiden kanssa. Kumpi tahansa vasemman siirtymän tyyppi siirtää nollan oikeanpuoleisimpaan bittiin.
Kun operandia siirretään oikealle, oikeanpuoleisin bitti ennen siirtoa heitetään yksinkertaisesti pois. Samoin vasemmanpuoleisin bitti ennen vasenta siirtoa hävitetään. Se ei kietoudu operandin toiseen päähän.
Bittikohtaiset siirtotoiminnot ovat kielestä ja toteutuksesta riippuvaisia. Esimerkiksi C: ssä ja C ++: ssa >> ja suorita loogisia siirtoja, jos operandi on allekirjoittamaton kokonaisluku. Jos operandi on allekirjoitettu kokonaisluku, on todennäköistä, että sen sijaan tehdään aritmeettinen siirto. Javassa kaikkia operandeja pidetään allekirjoitettuina, ja aritmeettiset siirrot suoritetaan aina näppäimillä >> ja. >>> -operaattoria käytetään loogiseen oikeaan siirtoon, mutta silti on mahdollista vahingossa tehdä aritmeettinen oikea siirto sen sijaan ilman huolellista kirjoitusasua.
Komplikaatioita voi syntyä myös silloin, kun operandeilla on erilaiset bittipituudet tai kun jotkut ovat allekirjoitettuja ja toiset allekirjoittamattomia. Bittikohtaisia ​​operaattoreita ja numeerisia vakioita monimutkaisen lausekkeen keskellä ei ehkä arvioida odotetusti. On välttämätöntä määrittää lausekkeen jokaisen määrän koko ja allekirjoitettu/allekirjoittamaton luonne. Tämä voidaan tehdä huolellisella tekstilähetyksellä tai väliaikaisilla määräyksillä tietyille muuttujatyypeille ohjelmakoodissa.