Arduino – Operátorok

Az operátor olyan szimbólum, amely a fordítót arra utasítja, hogy hajtson végre bizonyos logikai vagy matematikai feladatokat. Vegyük őket sorra.

Matematikai operátorok

A hozzárendelés operátor az egyenlőségjel jobb oldalán lévő értéket eltárolja az egyenlőségjel bal oldalán lévő változóban. Nem tévesztendő össze az egyenlő összehasonlító operátorral „==”.

A = B;
int a = 10;

Az „X” és „Y” operandusok értékét, (ezek lehetnek változók vagy állandók) összeadjuk és az „A” változónak átadjuk. Az összeadás operátor szintaxisa.

A = X + Y;

A kivonás operátor, szerintem nem kell magyarázni.

A = X - Y;

A szorzás.

A = X * Y;

És az osztás.

A = X / Y;

Az „X” változót elosztjuk az „Y” változóval és az osztás maradékát átadjuk az „A” változónak. Az „A” változó adattípusa lehet int, float vagy double, az „X” és az „Y” csak int. A modulo operátor szintaxisa:

A = X % Y;
int a = 7 % 5;  // a --> 2

Összehasonlító operátorok

Az egyenlő operátor (dupla egyenlőségjel) „==” ellenőrzi, hogy két operandus értéke egyenlő-e vagy sem, ha igen, akkor a feltétel igaz lesz. Ha az „A” értéke megegyezik a „B” értékével akkor igaz lesz, ellenkező esetben hamis.

int A = 12;
int B = 15;
if(A == B)  // --> false

A nem egyenlő operátor „!=” ellenőrzi, hogy két operandus értéke egyenlő-e vagy sem, ha az értékek nem egyenlőek, akkor a feltétel igaz lesz. Nézzük a példát.

int A = 12;
int B = 15;
if(A != B)  // --> true

A kisebb mint operátor”<” összehasonlítja a bal oldali változót az operátor jobb oldalán lévő értékkel vagy változóval. A feltétel igaz lesz, ha a bal oldali operandus kisebb, mint a jobb oldali operandus, ellenkező esetben hamis.

int A = 12;
int B = 15;
if(A < B)  // --> true

A nagyobb mint operátor”>” összehasonlítja a bal oldali változót az operátor jobb oldalán lévő értékkel vagy változóval. A feltétel igaz lesz, ha a bal oldali operandus nagyobb, mint a jobb oldali operandus, ellenkező esetben hamis.

int A = 12;
int B = 15;
if(A > B)  // --> false

A kisebb vagy egyenlő operátor”<=” összehasonlítja a bal oldali változót az operátor jobb oldalán lévő értékkel vagy változóval. A feltétel igaz lesz, ha a bal oldali operandus kisebb vagy egyenlő, mint a jobb oldali operandus, ellenkező esetben hamis.

int A = 12;
int B = 15;
if(A <= B)  // --> true

A nagyobb mint operátor”>=” összehasonlítja a bal oldali változót az operátor jobb oldalán lévő értékkel vagy változóval. A feltétel igaz lesz, ha a bal oldali operandus nagyobb, mint a jobb oldali operandus, ellenkező esetben hamis.

int A = 12;
int B = 15;
if(A >= B)  // --> false

Logikai operátorok

A logikai és „&&” operátor mindkét operandusa igaz, akkor a feltétel igaz lesz, különben hamis.

int A = 12;
int B = 15;
if(A == 15  && B == 15)  // --> false

A logikai vagy „||” operátor legalább egyik operandusa igaz, akkor a feltétel igaz lesz.

int A = 12;
int B = 15;
if(A == 15  || B == 15)  // --> true

A logikai tagadás „!” operátor megfordítja az operandus logikai állapotát.

bool A = true;
if(!A)  // --> false

Bitenkénti operátorok

A bináris „és” „&”operator a kifejezés a byte minden bitpozícióján függetlenül működik. Ennek a szabálynak megfelelően: ha mindkét bemeneti bit 1, akkor a kapott kimenet 1, egyébként a kimenet 0.

0 0 1 1  // operand1
0 1 0 1  // operand2
-------
0 0 0 1  // (operand1 & operand2)

A bináris „vagy” „|” operátora kifejezés minden bitpozícióján függetlenül működik. Ha vagy az egyik bemeneti bit értéke 1 vagy a másik bemeneti bit értéke 1 vagy mindkettőé 1, akkor a kimenet 1 lesz. Ha mindkettő bemeneti bit értéke 0 a kimenet 0 lesz.

0 0 1 1 // operandus1
0 1 0 1 // operandus2
-------
0 1 1 1 // (operand1 | operand2)

A bináris „kizáró vagy” operátor „^”. A bitenkénti XOR művelet eredménye 1 ha a bemeneti bitek eltérnek, egyéb esetben 0.

0  0  1  1   // operand1 
0  1  0  1   // operand2 
----------
0  1  1  0   // (operand1 ^ operand2)

A bitenkénti „nem” operátor „~” invertálja a biteket. Az 1-ből 0 lesz.

0 0 1 1  // operand1
-------
1 1 0 0  // ~ operand1

A balra eltolás operátor „<<„. A „B” operandus értékét „C ” pozicióval toljuk balra. A „B” operandus bal oldali bitjei kitolódnak és elvesznek.

A = B << C;

int B = 5;      // binary: 0000000000000101
int A = B << 3; // binary: 0000000000101000
A == 40;

A jobbra eltolás operátor „>>”. A „B” operandus értékét „C ” pozicióval toljuk jobbra. A „B” operandus jobb oldali bitjei kitolódnak és elvesznek.

A = B >> C;

int B = 40;      // binary: 0000000000101000
int A = B >> 3;  // binary: 0000000000000101
A == 5;

Összetett operátorok

Az inkrementáló operátor „++” eggyel növeli a változó értékét. Ezt két különböző módon használhatjuk. Az első példában az „A” változó átadja az értékét a „B” változónak majd eggyel növeli az értékét. A második példában az „A” változó növeli az értékét, majd átadja az értékét a „B” változónak. Tehát nem mindegy, hogy az operandus melyik oldalán van az operátor.

int A = 3;
int B;
B = A++;
// A == 4
// B == 3
int A = 3;
int B;
B = ++A;
// A == 4
// B == 4

A dekrementáló operátor „- -” eggyel csökkenti a változó értékét. Ezt két különböző módon használhatjuk. Az első példában az „A” változó átadja az értékét a „B” változónak majd eggyel csökkenti az értékét. A második példában az „A” változó csökkenti az értékét, majd átadja az értékét a „B” változónak. Tehát nem mindegy, hogy az operandus melyik oldalán van az operátor.

int A = 3;
int B;
B = A--;
// A == 2
// B == 3
int A = 3;
int B;
B = --A;
// A == 2
// B == 2

A hozzáadás hozzárendelés operátor „+=” hozzáadja a jobb operandus értékét a bal operandus értékéhez, és az eredményt a bal operandushoz rendeli. A += B müvelet egyenértékű ezzel A = A + B.

int A = 3;
int B = 2;
A += B;
// A == 5

A kivonás hozzárendelés operátor „-=” kivonja a jobb operandus értékét a bal operandus értékéből, és az eredményt a bal operandushoz rendeli. A -= B müvelet egyenértékű ezzel A = A -B.

int A = 3;
int B = 2;
A -= B;
// A == 1

A szorzás hozzárendelés operátor „*=” megszorozza a bal operandus értékét a jobb operandus értékével, és az eredményt a bal operandushoz rendeli. A *= B müvelet egyenértékű ezzel A = A *B.

int A = 3;
int B = 2;
A *= B;
// A == 6

Az osztás hozzárendelés operátor „/=” a bal operandus értékét elosztja a jobb operandus értékével, és az eredményt a bal operandushoz rendeli. A /= B müvelet egyenértékű ezzel A = A / B.

int A = 8;
int B = 2;
A /= B;
// A == 4

Moduluo hozzárendelés operátor „%” a bal operandus értékét elosztja a jobb operandus értékével, és az osztás maradékát a bal operandushoz rendeli. A %= B müvelet egyenértékű ezzel A = A % B.

int A = 8;
int B = 5;
A %= B;
// A == 3

A bitenkénti vagy hozzárendelés operátort „|=” gyakran használják, hogy a változó bizonyos bitjeit „átállítsák”. A |= B müvelet egyenértékű ezzel A = A | B.

int myByte = 0b10101010;
int myMask = 0b00000011;
myByte |= myMask; 

// myByte == 0b10101011

1 0 1 0 1 0 1 0
0 0 0 0 0 0 1 1
---------------
1 0 1 0 1 0 1 1

A bitenkénti és hozzárendelés operátort „&=” arrat használják, hogy a változóban lévő bizonyos biteket 0-ra állítsanak. Ezt „bitek törlésének” vagy „visszaállításának” is nevezik. Tehát a maszkban szereplő nullák, nullára állítják a változó azonos helyen lévő bitjeit, közben a változó többi részét változatlanul hagyja. A &= B müvelet egyenértékű ezzel A = A & B.

int myByte = 0b10101010;
int myMask = 0b11111100;
myByte &= myMask; 

// myByte == 0b10101000

1 0 1 0 1 0 1 0
1 1 1 1 1 1 0 0
---------------
1 0 1 0 1 0 0 0

A bitenkénti XOR hozzárendelés operátort „^=” gyakran használják változóval és állandóval a változó bizonyos bitjeinek átkapcsolására (invertálására). Tehát a maszkban szereplő egyesek, egyre állítják a változó azonos helyen lévő nulláit, közben a változó többi részét változatlanul hagyja. A ^= B müvelet egyenértékű ezzel A = A ^ B.

int myByte = 0b10101010;
int myMask = 0b00000011;
myByte ^= myMask; 

// myByte == 0b10101001

1 0 1 0 1 0 1 0
0 0 0 0 0 0 1 1
---------------
1 0 1 0 1 0 0 1

Tökéletes a gyakorláshoz:

Erőteljes Arduino tábla az Arduino Mega2560 breadboard adapterrel.

Arduino Mega2560 Rev3 Mikrokontroller
Erőteljes Arduino tábla az Arduino Mega2560 breadboard adapterrel – hirdetés

A következő rész a feltételes végrehajtást járja körül.