Omistamine ( = )

Omistusoperaatorid kasutatakse muutujale väärtuse andmiseks:


a = 10;

Sellise lause abil omistatakse muutujale a väärtus 10. Pane tähe, et omistuslauses on muutuja alati vasakpoolne, omistatav väärtus aga parempoolne.

Omistuslause töötab alati paremalt vasakule (ehk siis paremalpool olev väärtus omistatakse vasakpoolsele muutujale).

Vaatleme järgmist näidet:

a = b;

Sellisel juhul omistatakse muutuja b väärtus muutujale a. Pane tähele - muutub vaid muutuja a väärtus, muutuja b väärtus jääb samaks, mis ta oli enne omistuslauset.

int a, b;  //a ja b väärtused ei ole teada
a = 7;     //a väärtus on 7, b väärtus ei ole teada
b = 5;     //a väärtus on 7, b väärtus on 5
a = b;     // a väärtus on 5, b väärtus on 5
b = 13;    // a väärtus on 5, b väärtus on 13


Võimalike kasutusviidide näited:
  • a = 5 + (b = 7);

    on sama mis


    b = 7;
    a = 5 + b;

  • a = b = c = d = 6;

    omistab muutujatele a, b, c ja d väärtuse 6, seega on sama mis:

    a = 6;
    b = 6;
    c = 6;
    d = 6;

Aritmeetilised tehted

+ liitmine
- lahutamine
* korrutamine
/ jagamine
% mooduljagamine

Ülaltoodutest vaja selgitamist ilmselt vaid muuduljagamine. Vaatleme seda näite varal:

a = 17%5;

sellise tehte tulemusena saab a väärtuseks 2 kuna arvude 17 ja 5 jagamisel tekib
vastus 3 jääk 2 (seesama jääk saabki mooduljagamisel a väärtuseks)

Kombineeritud omistuslaused

Mõned näited:
  • a += b; on sama mis a = a+b;
  • a /= 7; on sama mis a = a/7;
  • a *= c + 9; on sama mis a = a*(c+9);
Sama kehtib ka kõigi teiste operaatorite kohta.

Inkrement ja dekrement

Ehk suurendamise tehe (++) ja vähendamise tehe (--).
  • Inkrement
a++;
a = a+1;
a += 1;

Toodud tehted tähendavad kõik ühte ja sama - a väärtust suurendatakse ühe võrra.

Suurendamise tehe (++) võib asuda enne muutujat (++a) või peale seda (a++). Erinevus seisneb järgmises:

b =  5;
a = ++b;
//b väärtus on 6
//a väärtus on 6
b =  5;
a = b++;
//b väärtus on 5
//a väärtus on 6

Esimesel juhul suurendatakse b väärtust ja omistatakse saadud väärtus seejärel muutujale a. Teisel juhul aga omistatakse b väärtus muutujale a ning suurendatakse b väärtust alles peale omistustehet.
  • Dekrement
a--;
a = a-1;
a -= 1;

Toodud tehted tähendavad kõik ühte ja sama - a väärtust vähendatakse ühe võrra.

Vähendamise tehte (--) asukoht enne muutujat (--a) või peale seda (a--) on analoogiline  sama olukorraga inkremendi puhul.

Loogikatehted
  • (a = = b) - võrdlustehe, kasutatakse siis kui on vaja teada kas a ja b väärtused on võrdsed  (NB! Ära kunagi kirjuta võrdluse korral a = b , kuna võrdusmärk tähendab C-keeles omistamist!)

  • (a > b) - tehe suurem, kasutatakse juhul kui on vaja teada kas a on suurem kui b

  • (a < b) - tehe väiksem, kasutatakse juhul kui on vaja teada kas a on väiksem kui b

  • (a != b) - tehe mittevõrdne, ehk loogiline eitus (paljudes teistes programeerimiskeeltes kasutatakse mittevõrdne loogikatehte puhul märki <>

  • ( a >= b ) - suurem või võrdne

  • ( a <= b ) - väiksem või võrdne
Loogilised operaatorid
  • ! - loogiline EI
  • && - loogiline JA (e. AND)
  • || - loogiline VÕI (e. OR)
Bititehted
  • >> - bittide nihutamine paremale
  • << - bittide nihutamine vasakule
  • ! -  eitus (bitthaaval)
  • & - konjunktsioon (bitthaaval)
  • - disjunktsioon (bitthaaval)

Loe lähemalt bititehete kohta näiteks:

The GNU C Programming Tutorial - Bitwise operators
http://crasseux.com/books/ctutorial/Bitwise-operators.html#Bitwise%20operators


Tingimustehe ?


Avaldis, mis koosneb tingimusest ja kahest tegevusest:

tingimus ? tegevus1 : tegevus2

Kui tingimus on tõene, täidetakse tegevus1, kui tingimus on mittetõene, täidetakse tegevus2


Näiteks:

a>b ? a : b


Tagastab a juhul, kui a on suurem kui b ning tagastab b juhul, kui a ei ole suurem kui b.

Funktsionaalselt sarnane valikulausega if, nendevaheline erinevus seisneb selles, et tingimustehet on võimalik kasutada ka avaldiste sees, isegi sellistes kohtades kus selle kasutamine tundub ootamatu ning if-lause kasutamine ei ole lubatud.

Näide:

(allikas: Teodor Luczkowski. Baasteadmised programmeerimiskeelest C++)

Järgmine koodilõik väljastab isikukoodi alusel tema soo (paarisarvuga algavad isikukoodid kuuluvad naistele). Kümnekohaline isikukood ei pruugi mahtuda 4-baidisesse täisarvu, seetõttu on ta kirjeldatud märgimassiivina ja esimese arvukoha leidmiseks kasutatakse märgikoodide lahutamist:

char ikood[11];
printf("Sisesta isikukood > ");
scanf("%s", ikood);
printf("Sugu: %c\n",(ikood[0]-'0')%2 ? 'M' : 'N');




Tehete prioriteedid

Tehete prioriteedist C-keeles saad põhjaliku ülevaate näiteks:

The GNU C Programming Tutorial - Precedence of operators
http://crasseux.com/books/ctutorial/Precedence-of-operators.html