OPERAATTORIT

Operaattorit ovat sanoja tai symboleja, jotka panevat ohjelman sekä muuttujat tekemään jotakin. C:ssä käytetään usean tyyppisiä operaattoreita kuten sijoitus-operaattoreita, aritmeettisia-operaattoreita, vertailu-operaattoreita, unaarisia-operaattoreita (yhden operandin operaattorit) ja loogisia-operaattoreita.


SIJOITUS-OPERAATTORI

Sijoituslauseet, joissa käytetään sijoitusoperaattorina = -merkkiä kirjoitetaan muodossa:

tunniste = ilmaus;

int numero, luku; numero = 21; luku = numero;

Esimerkissä (yllä), määritellään aluksi kokonaislukumuuttujat numero ja luku. Seuraavaksi numero -muuttujaan sijoitetaan 21 ja luku -muuttujaan sijoitetaan numero -muuttujassa oleva arvo, jolloin luku -muuttujassakin on arvona 21. Sijoituslauseessa tunniste esittää tavallisesti muuttujaa ja ilmaus esittää vakiota, muuttujaa tai jotain monimutkaisempaa ilmausta esim. funktion kutsua.


ARITMEETTISET-OPERAATTORIT

C-kielessä on käytössä viisi aritmeettista operaattoria:

Merkki Selite
+ Yhteenlasku
- Vähennyslasku
* Kertolasku
/ Jakolasku
% Jakojäännös, vain kokonaisluvuille


Esimerkissä (alla), pyydetään kaksi lukua ja niille tehdään yllä olevat aritmeettiset-laskutoimitukset. Jakojäännös ei toimi kaikilla kääntäjillä, DevC++ kääntäjllä jakojäännös saadaan fmod() -funktion avulla (esimerkki täällä).

/* Aritmeettiset-operaatiot */ #include <stdio.h> int main() { float luku1, luku2, tulos; printf("Anna luku: "); scanf("%f", &luku1); printf("Anna luku: "); scanf("%f", &luku2); /*laskutoimitukset*/ tulos = luku1 + luku2; printf("Summa %f \n", tulos); tulos = luku1 - luku2; printf("Erotus %f \n", tulos); tulos = luku1 * luku2; printf("Tulo %f \n", tulos); tulos = luku1 / luku2; printf("Osamaara %f \n", tulos); //tulos=luku1 % luku2; // printf("Jakojäännös %f \n", tulos); getch(); return 0; }




VERTAILU-OPERAATTORIT

Vertailuoperaattorit vertaavat kahta arvoa keskenään. Vertailuoperaattoreita käytetään usein valintoja tekevässä rakenteissa sekä toistorakenteissa. Esimerkiksi; onko luku suurempi kuin 100 tai onko luku1 suurempi tai yhtäsuuri kuin luku2. Paremmin vertailuoperaattorien käyttö selviää oppaan kohdista Valintojen ohjelmointi ja Toistolauseet.

C-kielen vertailuoperaattorit:

Merkki Selite
< Pienempi kuin
> Suurempi kuin
= = Yhtäsuuri kuin
!= Erisuuri kuin
<= Pienempi tai yhtäsuuri kuin
>= Suurempi tai yhtäsuuri kuin


Esimerkkiohjelmaassa (alla), vertailu-operaatiot tehdään printf-funktioissa.

/* vertailuoperaattorit */ #include <stdio.h> int main() { int i=9; printf("Kun i on 9, niin:\n\n"); printf("i < 5 on %d\n", i =< 5); /* false */ printf("i > 4 on %d\n", i > 4); /* true */ printf("i == 9 on %d\n", i == 9); /* true */ printf("i != 8 on %d\n", i != 8); /* true */ printf("i < = 7 on %d\n", i <= 7); /* false */ printf("i >= 6 on %d\n", i >= 6); /* false */ getch(); return 0; }




UNAARISET-OPERAATTORIT
(muuttujan arvon kasvatus tai vähennys)

Unaariset-operaattorit tarkoittavat muuttujan arvon kasvattamista numerolla 1 tai vähentämistä numerolla 1. Unaariset-operaattorit ovat inkrementointi- (lisäys) ja dekrementointioperaattorit (vähennys). Esim.

int i, j; i = 0; j = 0; ++i; /*vastaa seuraavaa i = i + 1; */ j++; --i; /*vastaa seuraavaa i = i - 1; */ j--;

Operaattorin ollessa ennen operandia, operandin arvo muuttuu ennen operandin käsittelyä komentolauseessa. Mikäli operaattori on operandin jälkeen, operandin arvoa muutetaan sen jälkeen, kun operandin suhteen on suoritettu komentolauseen mukaiset toimenpiteet. Unaarisia-operaattoreita käytetään usein toistolauseissa, esimerkiksi for-toistolauseessa.

/* vähennysoperaattorin käyttö */ #include <stdio.h> int main() { int arvo = 10; printf(”arvo = %d\n”, arvo); printf(”arvo = %d\n”, --arvo); printf(”arvo = %d\n”, arvo); printf(”arvo = %d\n”, arvo--); printf(”arvo = %d\n”, arvo); getch(); return 0; }


Unaarisia-operaattoreita käytetään usein toistolauseissa, esimerkiksi for-lauseessa.


LOOGISET-OPERAATTORIT

Ohjelmoinnissa loogiset-operaatiot toimivat samalla periaatteella kuin elektroniikan puolella. Esimerkiksi, tutkitaan kahden muuttujan arvoa joiden perusteella ratkaistaan tehdäänkö seuraava komento.

Loogisia-operaattoreita käytetään esimerkiksi if-lauseiden yhteydessä testatessa erilaisia ehtoja.

Esimerkki.

/* jos tulos on suurempikuin 10 JA tulos on pienempikuin 10*/ if (tulos > 10 && tulos < 20)

C-kieli sisältää kolme loogista operaattoria:

Merkki Selite (eng) Selite
&& AND JA, jos molemmat ilmaukset on tosia
|| OR TAI, jos jompikumpi ilmauksista on tosi
! NOT Kääntää ilmauksen ehdon


Operaattorin ollessa ennen operandia, operandin arvo muuttuu ennen operandin käsittelyä komentolauseessa. Mikäli operaattori on operandin jälkeen, operandin arvoa muutetaan sen jälkeen, kun operandin suhteen on suoritettu komentolauseen mukaiset toimenpiteet.


/* loogisten operaattorien käyttö */ #include <stdio.h> int main() { int a, b; a = 1; b = 2; printf(”Alkuarvot ovat:\n”); printf(”a = %d\nb = %d\n\n”, a, b); printf(”Testit\n”); printf(”a == 1 on %d\n”, a == 1); /* true */ printf(”b != 1 on %d\n”, b != 1); /* true */ printf(”Siksi (a == 1) && (b != 1) on %d\n”, (a == 1) && (b != 1)); /* true */ getch(); return 0; }



SUORITUSJÄRJESTYS

C-kielessä on operaattoreilla suoritusjärjestys. Operaattorit, joilla on korkein suoritusoikeus ovat listan alussa. Alhaisemman suoritusoikeuden omaavat operaattorit ovat listassa alempana. Sitovuus määrää laskemissuunnan. Esim. sijoitusoperaattorin (=) suhteen sitovuus oikealta vasemmalle tarkoittaa sitä, että oikealla oleva lauseke sijoitetaan vasemmalla olevaan muuttujaan.

Operaattorien suoritusjärjestys:

Operaattorityyppi Operaattori Sitovuus
Unaarinen --, ++ ov
Looginen NOT ! ov
Kertominen, jakaminen *, /, % vo
Yhteen-, vähennyslasku +, - vo
Vertailu <, <=, >, >= vo
Vertailu = =, != vo
Looginen AND && vo
Looginen OR || vo
Sijoitus = ov


Sulkumerkeillä voidaan operaattorien suoritusjärjestystä muuttaa !