Bit operátorok


A bitenkénti műveletek megkönnyítésére hozták létre a bitközi operátorokat.
Egy műveleti jelel összehasonlításokat, bit eltolásokat végezhetünk az adott értékeken.
Nézzük először az összehasonlító operátorokat:

& -- bitközi és (AND), két 2bájtos szám azonos helyi értékű bitjeit hasonlítja össze a következő táblázat szerint:

a szám   &   b szám  =  eredmény
     0                0               0
     0                1               0
     1                0               0
     1                1               1


Tehát csak akkor lesz 1 az eredmény ha mindkét szám bitje 1.
pl.: a szám 1001
      b szám 0101
 eredmény 0001

Fontos : legtöbbször 2 byte-os (16 bites) számokkal dolgozunk, a bit műveletek és a bit operátorok is ezeket használják, ezekhez optimalizáltak.


A következő operátor a vagy (OR):
| – bitközi vagy, két két bájtos szám azonos helyi értékű bitjeit hasonlítja össze a következő képpen:
a szám   |   b szám  =  eredmény
     0               0                0
     0               1                1
     1               0                1
     1               1                1

Akkor lesz 1 az eredmény ha a két összehasonlított bit közül valamelyik bit 1.
pl.: a szám 1001
     b szám 0101
eredmény 1101


A következő operátor egy kicsit máshogy hajtja végre az összehasonlítást :
^ – bitközi kizáró vagy (XOR), két két bájtos szám azonos helyi értékű bitjeit hasonlítja össze .
a szám  
^   b szám  =  eredmény
     0                0              0
     1                0              1
     0                1              1
     1                1              0

Összegezve a XOR működését: ha az összehasonlítandó bitek azonosak az eredmény nulla, ha különbözőek akkor az eredmény 1.

Ide tartozik mégse összehasonlítást hanem invertálást végez a bitenkénti nem (NOT):
~ – bitenkénti nem, a szám minden egyes bitjét ellenkező állapotba állítja.
pl.: ~ 0 = 1
   ~ 1 = 0
  ~10011 = 01100

2 bájtos számoknál (ha nem unsignedként használjuk) balról az első bit az előjelet jelzi, ezért
invertálásnál ez is megváltozik (pozitívból negatív szám lesz).


Bit eltolás
Két operátor segíti a bitek eltolását :
<< – balra tolja el a biteket
>> – ez pedig jobbra

Pontosan mit is csinálnak, arra nézzünk egy példát:
Pl.: 000101 << = 001010
A biteket egy helyi értékkel balra eltolja(ha nincs megadva az eltolás értéke), de használható így is:
000101 << 3 = 101000
itt három helyi értékkel toljuk el a biteket.

Az eltolásnál mindig nulla értékek adódnak a kiürülő bitértékekhez, a balra eltolásnál a jobb oldali
értékek helyére.

void setup(){
Serial.begin(9600);
}
void loop(){
String kiir =" binaris ertekenek eltolasa ";
String kiir2 = " ertekkel: ",kiir3;
int szam = 128;
Serial.println("Eltolas balra");
for(int i=0;i<8;i++){
kiir3 = szam+kiir+i+kiir2;
Serial.print(kiir3);
Serial.println(szam<<i);
}
while(1);
}

A balra eltolás a szám szorzása kettő hatványaival. Balra eltolás 1-gyel az a szám szorzása
2-vel (2
ą), balra eltolás 2-vel az a szám szorzása 4-el(2˛) … és így tovább.


Nézzünk egy jobbra eltolást is:
00110 >> = 00011
ugyan ez három értékű eltolásnál:
00110 >> 3 = 00000
jobbra toljuk el az értékeket balra adódnak hozzá null értékek.

void setup(){
Serial.begin(9600);
}
void loop(){
String kiir =" binaris ertekenek eltolasa ";
String kiir2 = " ertekkel: ",kiir3;
int szam = 128;
Serial.println("Eltolas jobbra");
for(int i=0;i<8;i++){
kiir3 = szam+kiir+i+kiir2;
Serial.print(kiir3);
Serial.println(szam>>i);
}
while(1);
}


A progi egy példa a jobbra eltolás egy matematikai használatáról, ha jobbra eltoljuk a biteket eggyel
akkor 2-vel osztunk(2
ą), ha 2-vel toljuk el akkor 4-el osztunk(2˛) ...és így tovább.