Linux C Programmeren Handleiding Deel 11 – Rekenkundige, Relationele en Logische operatoren

Tot nu toe hebben we in deze C programmeer-tutorial serie basis dingen besproken als functies, arrays, variabelen, en meer. Verdergaand met de stroom, bespreken we in deze leerprogramma’s nog zo’n basisbegrip: operatoren.

Als beginner in de programmeertaal C heb je vooral te maken met drie soorten operatoren: rekenkundige, relationele, en logische. Laten we beginnen met de rekenkundige operatoren.

Er zijn in wezen 5 soorten rekenkundige operatoren in C: +, -, *, /, en %. Terwijl +, -, en / voor zichzelf spreken, verwijst * naar vermenigvuldiging en is % de modulus operator. Voor het geval je het niet weet, geeft de % operator je een rest. Bijvoorbeeld:

a % b

Hier zorgt de % operator ervoor dat je de restwaarde krijgt als ‘a’ gedeeld wordt door ‘b’. Dit betekent dat de rest nul kan zijn in gevallen dat ‘a’ volledig deelbaar is door ‘b’. Hier is een klein voorbeeld dat je meer duidelijkheid moet geven over deze operatoren:

#include <stdio.h>

int main()
{
int a = 10, b = 3, c =0;
c = a + b;
printf("%d\n", c);

c = a - b;
printf("%d\n", c);

c = a*b;
printf("%d\n", c);

c = a/b;
printf("%d\n", c);

c = a%b;
printf("%d\n", c);

return 0;
}

Hieronder volgt de uitvoer van dit programma:

13 
7
30
3
1

Het is de moeite waard hier te vermelden dat wanneer je met vlotters en dubbels te maken hebt, je de % operator niet moet gebruiken. Ook zijn de + en – operatoren die we hier gebruikt hebben binaire operatoren, wat betekent dat ze twee operanden nodig hebben (bijvoorbeeld ‘a’ en ‘b’ in ons geval). Er zijn ook unaire + en – operatoren, die op een enkel operand werken.

Hier zie je een voorbeeld van de unaire – operator in actie:

#include <stdio.h>

int main()
{
int a = 10, b = 3, c =0;
c = -a;
printf("c = %d", c);
}

Hier is de uitvoer:

c = -10

Van alle tot nu toe besproken operatoren delen, in rangorde, de unaire + en – de eerste plaats, gevolgd door *, / en %, die op hun beurt weer gevolgd worden door binaire + en -.

Merk op dat er ook nog enkele andere unaire operatoren zijn, waarvan we er sommige al indirect besproken hebben in onze eerdere handleidingen. Hier is de lijst: ++, –, !, &, en sizeof.

We bespraken al de oplopende en aflopende operatoren ++ en — (in zowel prefix als postfix vorm). ! is een NIET operator die alles waarop hij wordt toegepast ontkent. Bijvoorbeeld, als de uitkomst van een voorwaarde waar is, zet het toepassen van ! het om in onwaar, en omgekeerd.

Verder wordt & gebruikt om het adres van een variabele op te halen (zoals je al zag bij scanf() functie-argumenten), terwijl sizeof operator je de grootte geeft van het operand dat eraan doorgegeven wordt. Het volgende stukje code zou je een beter idee over deze operatoren moeten geven:

#include <stdio.h>

int main()
{
int a = 10, b = 3, c =0, d =1, e=0, f=9;

printf("a = 10 and a++ = %d\n", a++);

printf("b = 3 and ++b = %d\n", ++b);

printf("c = 0 and c-- = %d\n", c--);

printf("d = 1 and --d = %d\n", --d);

if(!e)
{
printf("\n e is zero or FALSE and its address is: %u\n", &e);
printf("\n sizeof 'f' is: %u\n", sizeof(f));

}


return 0;

}

En hier is de uitvoer:

a = 10 and a++ = 10 
b = 3 and ++b = 4
c = 0 and c-- = 0
d = 1 and --d = 0

e is zero or FALSE and its address is: 856178696

sizeof 'f' is: 4

Laten we nu snel even kijken naar relationele en logische operatoren. Hieronder volgen relationele operatoren:

> >= < <= == !=

Hier zie je hoe ze gebruikt kunnen worden:

a > b
a >= b
a < b
a <= b
a == b
a != b

In volgorde van hun verschijnen hierboven, controleren deze operatoren of ‘a’ groter is, groter dan of gelijk aan, kleiner dan, kleiner dan of gelijk aan, gelijk, en niet gelijk aan ‘b’. De eerste vier operatoren hebben dezelfde voorrang, die hoger is dan de laatste twee. Merk op dat de laatste twee operatoren ook gelijkheidsoperatoren genoemd worden.

En tenslotte komen we bij de logische operatoren. Er zijn er in hoofdzaak twee: && en ||. Deze beide operatoren worden meestal gebruikt om voorwaarden of uitdrukkingen te evalueren. Bijvoorbeeld:

if (cond1 && cond2)
{

}

if (expr1 && expr2)
{

}

if (cond1 || cond2)
{

}

if (expr1 || expr2)
{

}

In het geval van de eerste twee if statements komt de uitvoering pas in het blok als beide voorwaarden waar zijn. Terwijl in het geval van de laatste twee if statements, de uitvoering het blok ingaat als een van de voorwaarden van de uitdrukking waar is.

Bedenk dat relationele operatoren een lagere voorrang hebben dan rekenkundige, en die van logische operatoren is lager dan relationele en gelijkheidsoperatoren. Onder elkaar heeft && een hogere voorrang dan ||.

Conclusie

In deze handleiding hebben we de basisprincipes van operatoren besproken, hoe ze werken en hun voorrang. Het is aan te raden enkele voorbeeld C programma’s te maken om de hier besproken concepten uit te proberen. Als je twijfels of vragen hebt, laat het ons dan weten in de commentaar hieronder.