OPERATORI U JEZIKU C++
Operatori se klasifikuju prema broju operanada na:
- Unarne operatore – deluju na jedan operand (npr. ++, --).
- Binarne operatore – primenjuju se na dva operanda (npr. +, -, *).
- Ternarne operatore – koriste tri operanda, kao što je uslovni operator (? :).
- Aritmetički operatori poput +, - i * koriste se za osnovne matematičke operacije.
- Relacijski operatori (==, !=, >, <) omogućavaju poređenje vrednosti.
Karakteristike operatora
- Operatori predstavljaju radnje koje se izvršavaju nad operandima, vraćajući određeni rezultat.
- Izrazi u C jeziku mogu biti složeni sastavi operanada i operatora, što omogućava formiranje složenih logičkih i matematičkih operacija.
- Operatori se primenjuju na jedan operand (kao kod unarnih operatora) ili na dva operanda (kod binarnih operatora).
- Postoji jedan operator sa tri operanda - ternarni operator (? :), koji se koristi za jednostavne uslovne izraze (objašnjen detaljno kasnije).
Pročitajte i Operatori u JAVI
int result = (a < b) ? a : b; // ternarni operator vraća 10 jer je a manje od b
Aritmetički operatori
Operator | Upotreba | Opis |
---|---|---|
+ | op1+op2 | Sabira op1 i op2 |
- | op1-op2 | Oduzima op2 od op1 |
* | op1*op2 | Množi op1 sa op2 |
/ | op1/op2 | Deli op1 sa op2 |
% | op1%op2 | Računa ostatak deljenja op1 sa op2 |
U tabeli su dati aritmetički operatori koji se koriste u izrazima
Na primer: izračunati vrednost Re iz date jednačine: : 1/Re=1/R1+1/R2
Resenje
int main()() {
std::cout << "Unesite vrednosti za R1 i R2: ";
std::cin >> R1 >> R2; // Korisnik unosi R1 i R2
Re = R1 * R2 / (R1 + R2); // Dobijeno rešenje zadate jednačine
std::cout << "Rešenje: " << Re << std::endl;
}
Ostatak deljenja dva broja. Operator "%"
Pretpostavimo da delimo dva cela broja: 7 i 3
Ako napišemo 7/3 dobićemo za rezultat 2. Rezultat je ceo broj jer smo delili dve celobrojne konstante
Ako želimo da dobijemo ostatak deljenja onda bi smo upotrebili operator %
7 % 3 = 1
Primer: Učitati vreme u minutama i ispisati u obliku mm:ss
int main()() {
std::cout << "Unesite vreme u sekundama: ";
std::cin >> Vr; // Korisnik unosi vreme u sekundama
/* Pretpostavimo da je korisnik uneo za vreme 132s. Pošto jedan minut ima 60s,
od ovih 132s ćemo 2*60s pretvoriti u dva minuta, a ono što preostane staviti kao sekunde, u ovom
primeru to je 132-(2*60)= 12s. Ovo računski možemo dobiti korišćenjem operatora deljenja i ostatka deljenja, "/" i "%". */
mm = Vr / 60; // mm=132/60=2
ss = Vr % 60; // ss=132%60=12
std::cout << "Vreme: " << mm << " : " << ss << std::endl;
}
Tip podatka za rezultat | Tipovi podataka za operande |
---|---|
long | Nijedan od operanada nije float ili double (artiemtika celih brojeva), a najmanje jedan od operatora je tipa long |
int | Nijedan od operanada nije float ili double (aritmetika celih brojeva). Nijedan operand nije long. |
double | Najmanje jedan operand je tipa double |
float | Najmanje jedan operand je tipa float. Nijedan nije tipa double |
Unarni operatori "++","--"
Relacioni i uslovni operatori
Operator | Upotreba | Vraća tačno(true) ako je |
---|---|---|
> | op1>op2 | op1 veće od op2 |
>= | op1 >= op2 | op2 veće ili jednako op1 |
< | op1 < op2 | op1 manje od op2 |
<= | op1 <= op2 | op1 manje ili jednako op2 |
== | op1 == op2 | op1 jednako sa op2 |
!= | op1 != op2 | op1 različito od op2 |
Primer relacionih operatora
int main()() {
std::cout << "Unesite vrednost za a: ";
std::cin >> a;
std::cout << "Unesite vrednost za b: ";
std::cin >> b;
if (a > b) {
}
Operator | Upotreba | Vraća tačno(true) ako je |
---|---|---|
&& | op1 && op2 | i op1 i op2 imaju vrednost true. op2 se izračunava samo ako je potrebno |
|| | op1 || op2 | ili op1 ili op2 ima vrednost true (tačno). op2 se izračunava samo ako je potrebno |
! | !op | op ima vrednost false (netačno) |
& | op1 & op2 | i op1 i op2 imaju vrednost tačno. Uvek se izračunava i op1 i op2 |
| | op1 | op2 | Ili je op1 ili je op2 true (tačno). Uvek se izračunava i op1 i op2. |
^ | op1 ^ op2 | ako su op1 i op2 različiti, odnosno ako jedan ima vrednost true, ali ne i oba |
Logički operatori
- && - Logički AND (vraća tačno ako su oba izraza tačna).
- || - Logički OR (vraća tačno ako je barem jedan od izraza tačan).
- ! - Logički NOT (menja vrednost izraza u suprotno, tj. tačno postaje netačno i obrnuto).
Primeri logičkih operatora
bool x = true;
bool y = false;
bool rezultat = (x && y); // rezultat je false jer oba izraza nisu tačna
Primer: Za zadate vrednosti celobrojnih promenljivih a, b, c odredi vrednosti logičkih izraza:
- a>b
- ! a > b && !(b<c)
- a !=0 || !(a>(b>c))
Rešenje:
Vrednosti logičkih izraza u C++ jeziku su takođe tipa bool
. Logički izraz ima vrednost true ako je uslov ispunjen (istinit), odnosno false ako uslov nije ispunjen (neistinit). Ovo se razlikuje od C jezika, gde su logičke vrednosti predstavljene celim brojevima (1 za istinito i 0 za neistinit). Ako definišemo tri cela broja sa vrednostima 4
, 7
, i 11
, vrednosti logičkih izraza biće sledeće:
1. Izraz a > b
Daje vrednost false jer 4
nije veće od 7
.
a > b
4 > 7
false
2. Izraz !(a > b && !(b < c))
Ima vrednost true. Kada zamenimo vrednosti za a
, b
i c
, dobijamo:
!(4 > 7 && !(7 < 11))
= !((false) && (true))
= !(false)
= true
Prvo se obrađuju operatori >
i <
, jer imaju viši prioritet od logičkih operatora. Dakle, 4 > 7
je false, a 7 < 11
je true. Zatim, operator &&&
kombinuje te vrednosti: false && true
daje false. Na kraju, negacija !
pretvara false
u true.
3. Izraz a != 0 || !(a > (b > c))
Daje vrednost true. Kada zamenimo vrednosti za a
, b
i c
, dobijamo:
4 != 0 || !(4 > (7 > 11))
= true || !(4 > false)
= true || !(false)
= true || true
= true
Objašnjenje:
4 != 0
je true, jer je4
različito od0
.- Izraz
(7 > 11)
je false, jer7
nije veće od11
. - Zatim,
4 > false
tretirafalse
kao0
, pa je rezultat4 > 0
, što daje true. - Na kraju, negacija
!
dajefalse
, ali operator||
kombinuje sa prvim delom (true || false
), što rezultira true.
Zaključak:
Redosled izvršavanja operatora u C++ jeziku sledi prioritete, gde se operatori poređenja (>
, <
, !=
) izvršavaju pre logičkih operatora kao što su &&&
i ||
. Kao i u matematici, zagrade se koriste za jasno određivanje redosleda izvršavanja.
using namespace std;
int main() {
bool e, f, g;
a = 4; // Dodeljivanje vrednosti promenljivoj a
b = 7; // Dodeljivanje vrednosti promenljivoj b
c = 11; // Dodeljivanje vrednosti promenljivoj c
// Izračunavanje logičkih izraza
e = a > b; // e je true ako je a veće od b, inače false
f = !(a > b && !(b < c)); // Kombinacija AND i NOT operatora
g = a != 0 || !(a > (b > c)); // Kombinacija OR i NOT operatora
// Ispisivanje vrednosti izraza
cout << "e=" << e << endl;
cout << "f=" << f << endl;
cout << "g=" << g << endl;
}
Razlika između relacionih i logičkih operatora
- Relacioni operatori vrše poređenje između dve vrednosti, a rezultat poređenja je logička vrednost (tačno ili netačno). Na primer, da li je broj a veći od b.
- Logički operatori kombinuju ili negiraju logičke vrednosti. Oni ne rade direktno na numeričkim vrednostima kao relacioni operatori, već na rezultatima koji su već true ili false.
#include <stdio.h>
#include <stdbool.h>
int main() {
int a = 10;
int b = 20;
int c = 15;
// Prvo koristimo relacione operatore da dobijemo booleanske vrednosti
bool uslov1 = (a < b); // true jer je 10 manje od 20
bool uslov2 = (c == 15); // true jer je c jednako 15
// Zatim koristimo logičke operatore da kombinujemo rezultate
bool konacanRezultat = uslov1 && uslov2; // true jer su oba uslova tačna
printf("Konacan rezultat: %d\n", konacanRezultat);
return 0;
}
U ovom C programu koristimo tip bool iz zaglavlja <stdbool.h>, koje je uvedeno u C99 standardu. Pre ovog standarda, C je koristio celobrojne vrednosti za booleanske izraze (0 za false i nenulu za true). U C99, bool omogućava korišćenje vrednosti true i false, što čini kod čitljivijim i semantički jasnijim.
Program prvo definiše tri celobrojne promenljive (a, b, c) i koristi relacione operatore za kreiranje booleanskih vrednosti (uslov1 i uslov2). Zatim, koristi logički operator && da kombinuje ove uslove u konačan rezultat (konacanRezultat), koji se ispisuje na ekranu.
Bez #include <stdbool.h>, tip bool ne bi bio prepoznat, a kod bi izazvao grešku prilikom kompilacije.
Operatori po bitovima
- operatori za izvođenje logičkih operacija između parova bitova na istim pozicijama unutar svojih operanada
- operatori za pomeranje
- ~ Vrši komplementiranje(negaciju) vrednosti svog operanda po bitovima. Dakle, vrši pretvaranje iz stanja 0 u stanje 1 i obrnuto
- & Logičko "i" za operacije po bitovima.
- | Logičko uključivo "ili" za operacije po bitovima.
- ^ Logičko isključivo "ili" za operacije po bitovima.
- << Vrši pomeranje levog operanda za onoliko binarnih mesta ulevo kolika je vrednost desnog operanda
- >> Vrši pomeranje levog operanda za onoliko binarnih mesta udesnokolika je vrednost desnog operanda. Pomeranje udesno za n pozicija ekvivalentno je deljenju broja sa 2^n
Primeri za operatore po bitovima
- 25 & 5 = 1 0000000000011001 &
0000000000000001
- 25 | 5 = 29 0000000000011001 |
0000000000011101
- 25 ^ 5 = 28 0000000000011001 ^
0000000000011100
- 25 << 2 = 100 0000000000011001 <<2 =
- 25 >> 3 = 3 0000000000011001 &
0000000000000011
Operator dodele
Operator | Upotreba | Ekvivalentno sa: |
---|---|---|
+= | op1 += op2 | op1 = op1 + op2 |
-= | op1 -= op2 | op1 = op1 - op2 |
*= | op1 *= op2 | op1 = op1 * op2 |
/= | op1 /= op2 | op1 = op1 / op2 |
%= | op1 %= op2 | op1 = op1 % op2 |
&= | op1 &= op2 | op1 = op1 & op2 |
|= | op1 |= op2 | op1 = op1 | op2 |
^= | op1 ^= op2 | op1 = op1 ^ op2 |
Na primer:
int N=28;
N=N<<3;
Početni broj 28 ce se transformisati u broj 224 i ta vrednost se dodeljuje istoj memoriji N.
- 28 << 3 = 224 0000000000011100 <<2 =
Ostali operatori u C++
Uslovni izraz: ? :
Za unete cele brojeve a i b odrediti veći broj.
Rezervišimo memoriju za 3 podatka, a i b i veći od ta dva ćemo smestiti u novu promenljivu maxAB.
int a,b,maxAB;
Korisnik zatim unosi a i b sa konzole:
cin>>a>>b;
Da bi dodelili vrednost maxAB , moguće su dve varijante:
maxAB=a; ako je a >=b ili
maxAB=b, ako je a<b
Ako bi stavili obe varijante, prvo bi vrednost maxAB bila a a kasnije bi se promenila u b i uvek bi na kraju bila b.
Potrebno je prvo postaviti pitanje da li je a>b, pa ako je to tačno onda se izvršava maxAB=a, u suprotnom maxAB=b;
Za to se koristi uslovni izraz:
maxAB=(a>b) ? a : b;
Na kraju treba odštampati ovu vrednost:
cout<<"Veći broj je "<<maxAB<<endl;
SIZEOF operator
#include <iomanip>
using namespace std;
int main() {
int a;
char b;
short c;
long d;
long long e;
unsigned long int f;
cout << "\nUnesi ceo broj a: ";
cin >> a;
cout << "\nUnesi ceo broj b: ";
cin >> b;
cout << "\nUnesi ceo broj c: ";
cin >> c;
cout << "\nUnesi ceo broj d: ";
cin >> d;
cout << "\nUnesi ceo broj e: ";
cin >> e;
cout << "\nUnesi ceo broj f: ";
cin >> f;
cout << "\nVelicina podatka int je " << sizeof(int) << " bajta i to je jednako velicini a=" << sizeof(a) << " bajta";
cout << "\nVelicina podatka char je " << sizeof(char) << " bajta i to je jednako velicini b=" << sizeof(b) << " bajta";
cout << "\nVelicina podatka short je " << sizeof(short) << " bajta i to je jednako velicini c=" << sizeof(c) << " bajta";
cout << "\nVelicina podatka long je " << sizeof(long) << " bajta i to je jednako velicini d=" << sizeof(d) << " bajta";
cout << "\nVelicina podatka long long je " << sizeof(long long) << " bajta i to je jednako velicini e=" << sizeof(e) << " bajta";
cout << "\nVelicina podatka unsigned long int je " << sizeof(unsigned long int) << " bajta i to je jednako velicini f=" << sizeof(f) << " bajta";
return 0;
}
Operator zareza ","
Još po neki operator
Operator | Opis operatora |
---|---|
[] | Indeksiranje |
() | Poziv funkcije |
& | Adresa promenljive |
. | Pristup članu klase ili strukture |
-> | Pristup članu klase ili strukture preko pokazivača |
:: | Rezolucija opsega (koristi se za pristup statičkim članovima klase ili za razrešavanje imena u okviru prostora imena) |
* | Dereferenciranje pokazivača |
.* | Pristup članu klase ili strukture kroz pokazivač na član |
->* | Pristup članu klase ili strukture kroz pokazivač na član koristeći pokazivač na objekat |
sizeof | Vraća veličinu objekta ili tipa u bajtovima |
typeid | Vraća tip objekta u runtime-u |
dynamic_cast | Dinamičko kastovanje između klasa koje su deo iste hijerarhije |
static_cast | Kompajlaciono kastovanje bez runtime provere |
const_cast | Uklanja ili dodaje `const` kvalifikator tipu |
reinterpret_cast | Reinterpretacija bita objekta za kastovanje između nepovezanih tipova |
Tabela prioriteta operatora
Donja tabela opisuje redosled prioriteta i asocijativnost operatora u C . Prednost operatera se smanjuje od vrha do dna.
Prioritet | Broj operanada | Smer grupisanja: | Operatori: |
---|---|---|---|
15 | 1 ili 2 | levo | [] () . -> |
14 | 1 | desno | ++ -- ~ ! + - * & sizeof typeid new delete |
13 | 2 | levo | * / % |
12 | 2 | levo | + - |
11 | 2 | levo | << >> |
10 | 2 | levo | < <= > >= |
9 | 2 | levo | == != |
8 | 2 | levo | & |
7 | 2 | levo | ^ |
6 | 2 | levo | | |
5 | 2 | levo | && |
4 | 2 | levo | || |
3 | 2 | desno | ?: |
2 | 2 | desno | = += -= *= /= %= &= ^= |= <<= >>= |
1 | 2 | levo | , |
Sledeće
Grananje u programu >| |