Operatori u jeziku C++
U programskom jeziku C++, operatori su osnovni alati za manipulaciju podacima, omogućavajući izvođenje različitih matematičkih, logičkih i bitovnih operacija. Operator predstavlja simbol koji označava radnju nad jednim ili više operanada, pri čemu rezultat može biti promena vrednosti, poređenje ili logička procena.
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 (? :).
Na primer:
- Aritmetički operatori poput +, - i * koriste se za osnovne matematičke operacije.
- Relacijski operatori (==, !=, >, <) omogućavaju poređenje vrednosti.
Razumevanje operatora je ključno za efikasno programiranje u C++ jer omogućava preciznu kontrolu nad ponašanjem programa, čineći vaš kod čitljivijim i funkcionalnijim.
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
Primer operatora:int a = 10, b = 20;
int result = (a < b) ? a : b; // ternarni operator vraća 10 jer je a manje od b
Aritmetički operatori
Koriste se za izraze sa osnovnim računskim operacijama. U tabeli ispod je dat pregled aritmetičkih operatora
U sledećoj tabeli je dat pregled aritmetičkih podataka.
| 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
#include <iostream>
int main() {
double R1, R2, Re;
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;
return 0;
;
}
Ukoliko su operacije istog prioriteta izvršava se kod sa leva na desno. Množenje i delenje imaju isti prioritet, a veći od sabiranja i oduzimanja koji su opet, između sebe, jednakog prioriteta. Ako se želi dati prednost računskoj operaciji manjeg prioriteta onda treba upotrebiti zagrade, kao što je i urađeno u primeru.
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
Rešenje:Od podataka nam treba vreme u sekundama (Vr), a na izlazu za ispis minuti (mm) i sekunde (ss)
#include <iostream>
int main() {
int Vr, mm, ss;
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;
return 0;
;
}
Kada se kao operandi u jednoj aritmetičkoj operaciji koriste zajedno ceo broj i realan broj, rezultat je realan broj. Ceo broj se implicitno konvertuje u realan broj pre samog izračunavanja. U tabeli koja sledi su prikazani tipovi podataka koji se vraćaju iz aritmetičkih operacija, na osnovu tipova operanada. Potrebne konverzije se vrše pre nego što se obavi operacija.
| 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 "++","--"
Postoje i dva operatora koji omogućavaju skraćeno izračunavanje. To su operator ++(inkrement) koji operand povećava za 1 i operator – (dekrement) koji operand smanjuje za 1. Oba operatora mogu da se pojave ispred operanda (prefiks) i iza operanda (postfiks). Kod verzije prefiks, ++op/--op se prvo operand povećava za 1, pa se taj rezultat koristi dalje u izrazima. Kod verzije postfix se prvo operand primeni u izrazu (stara vrednost), a tek posle se ta vrednost promeni.
Relacioni i uslovni operatori
Relacioni operator poredi dve vrednosti i određuje vrednost između njih. Na primer, != vraća tačno ako dva operanda nisu jednaka. U tabeli koja sledi su dati relacioni 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
#include <iostream>
int main() {
int a, b;
std::cout << "Unesite vrednost za a: ";
std::cin >> a;
std::cout << "Unesite vrednost za b: ";
std::cin >> b;
if (a > b) {
std::cout << "a je veće od b" << std::endl;
}
return 0;
;
}
Ovaj operator poredi vrednosti a i b i kao rezultat vraća vrednost true, ako jeste tačan izraz a>b, odnosno false, ako nije. Relacioni operatori se često koriste zajedno sa logičkim operatorima, čime se dobijaju složeni izrazi. U Javi postoje sledeći logički operatori:
| 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 |
Koja je razlika između operatora && i &? Razlika je u brzini izvršavanja programa. Sa operatorom & se vrednost drugog operatora uvek izračunava, dok se sa operatorom && izračunava vrednost prvog operanda, a ako je to dovoljno da se izračuna vrednost celog izraza, drugi operand se ne izračunava.
Logički operatori
Logički operatori se koriste za logičke operacije između booleanskih vrednosti (true i false). Najčešće se koriste u uslovima za kombinovanje više logičkih izraza. Primeri logičkih operatora su:
- && - 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
#include <iostream>
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 o dredi vrednosti logičkih izraza
a=4,b=7, c=11
- 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) && false)
= !(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 || !(4 > 1)
= true || !(true)
= true || false
= true
Objašnjenje:
4 != 0je true, jer je4različito od0.- Izraz
(7 > 11)je false, jer7nije veće od11. - Zatim,
4 > falsetretirafalsekao0, 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.
#include <iostream>
using namespace std;
int main() {
int a, b, c;
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;
return 0;
;
}
Na standardno izlazu tj. konzoli:

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.
Primer koji uključuje oba tipa operatora:
// Uključivanje potrebnih zaglavlja
#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 primeru, relacione operacije (a < b i c == 15) vraćaju booleanske vrednosti, koje se zatim kombinuju pomoću logičkog AND operatora (&&).
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 po bitovima omogućavaju izvođenje operacija na nivou bitova unutar celobrojnih podataka. Postoje dve grupe operatora po bitovima:
- operatori za izvođenje logičkih operacija između parova bitova na istim pozicijama unutar svojih operanada
- operatori za pomeranje
Za izvođenje logičkih operacija po bitovima imamo sledeće operatore:
- ~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.
Za izvođenje logičkih operacija po bitovima imamo sledeće operatore za pomeranje:
- <<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
Npr. za podatke tipa int koji imaju po 16 bitova memorije:
- 25 & 5 = 1 0000000000011001 &
0000000000000111 =
0000000000000001
- 25 | 5 = 29 0000000000011001 |
0000000000000101 =
0000000000011101
- 25 ^ 5 = 28 0000000000011001 ^
0000000000000101 =
0000000000011100
- 25 << 2 = 100 0000000000011001 <<2 =
0000000001110100
- 25 >> 3 = 3 0000000000011001 &
0000000000000101 =
0000000000000011
Operator dodele
Osnovni operator dodele je operator =, kojim se jedna vrednost dodeljuje drugoj. U C, C++ postoje i operatori dodele kojim se odjednom izvršava više operacija. Pretpostavimo da želite da saberete vrednost promenljive sa nekim brojem i da rezultat dodelite istoj promenlivoj. Napisali biste: i = i + 2; Skraćeno se ovo može napisati pomoću operatora += na sledeći način: i += 2; Prethodna dva izraza su ekvivalentna. U tabeli koja sledi su dati neki od operatora ovog tipa:
| 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 |
Operatori po bitovima mogu da se kombinuju sa operatorima dodele:
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 =
0000000011100000
Ostali operatori u C++
Uslovni izraz: ?
Posmatrajmo sledeći problem:
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
Pomoću ovog operatora se može odrediti veličina podatka u bajtovima. Sledeći primer to demonstrira:
#include <iostream>
#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;
}
Ako unesemo proizvoljno šest celih brojeva(vrednost ne utiče na veličinu podatka) na izlazu ćemo dobiti:

Vidimo da primenimo sizeof operator na tip podatka sizeof(int) ili na sam podatak sizeof(a) dobijemo veličinu podatka u bajtovima
Operator zareza ","
je binarni operator koji procenjuje svoj prvi operand i odbacuje rezultat, zatim procenjuje drugi operand i vraća ovu vrednost (i tip). Operator zareza ima najniži prioritet bilo kog C operatora. Comma deluje kao operator i separator
Još po neki operator
Ostali operatori u jeziku C/C++ dati su u sledećoj tabeli:
| 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
Kada u izrazu ima više operatora onda se prvo izvršavaju operacije većeg prioriteta. Ako su operatori istog prioriteta, tada će izvršavanje biti sa leva na desno u većini slučajeva(Pogledati kolonu Smer grupisanja u tabeli ispod).
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 | , |
Testiraj svoj kod ovde!
Proveri znanje
Otvori kviz
Kviz: Operatori u C++-u
1. Koliko je 7 / 2 ako su oba broja tipa int?
2. Koliko je 17 % 5?
3. Posle int a = 5; int b = a++; koliko je b?
4. Koji izraz je tačan kada su oba uslova tačna?
| Prethodno |<Podaci u C/C++ jeziku |
Sledeće Grananje u programu>| |
OPERATORI U JEZIKU C++
U programskom jeziku C++, operatori su osnovni alati za manipulaciju podacima, omogućavajući izvođenje različitih matematičkih, logičkih i bitovnih operacija. Operator predstavlja simbol koji označava radnju nad jednim ili više operanada, pri čemu rezultat može biti promena vrednosti, poređenje ili logička procena.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
Primer operatora:int a = 10, b = 20;
int result = (a < b) ? a : b; // ternarni operator vraća 10 jer je a manje od b
Aritmetički operatori
Koriste se za izraze sa osnovnim računskim operacijama. U tabeli ispod je dat pregled aritmetičkih operatora| 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
intmain()() {
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
Rešenje:Od podataka nam treba vreme u sekundama (Vr), a na izlazu za ispis minuti (mm) i sekunde (ss)intmain()() {
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;
}
Kada se kao operandi u jednoj aritmetičkoj operaciji koriste zajedno ceo broj i realan broj, rezultat je realan broj. Ceo broj se implicitno konvertuje u realan broj pre samog izračunavanja. U tabeli koja sledi su prikazani tipovi podataka koji se vraćaju iz aritmetičkih operacija, na osnovu tipova operanada. Potrebne konverzije se vrše pre nego što se obavi operacija.
| 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 "++","--"
Postoje i dva operatora koji omogućavaju skraćeno izračunavanje. To su operator ++(inkrement) koji operand povećava za 1 i operator – (dekrement) koji operand smanjuje za 1. Oba operatora mogu da se pojave ispred operanda (prefiks) i iza operanda (postfiks). Kod verzije prefiks, ++op/--op se prvo operand povećava za 1, pa se taj rezultat koristi dalje u izrazima. Kod verzije postfix se prvo operand primeni u izrazu (stara vrednost), a tek posle se ta vrednost promeni.
Relacioni i uslovni operatori
Relacioni operator poredi dve vrednosti i određuje vrednost između njih. Na primer, != vraća tačno ako dva operanda nisu jednaka. U tabeli koja sledi su dati relacioni 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
intmain()() {
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 operatori se koriste za logičke operacije između booleanskih vrednosti (true i false). Najčešće se koriste u uslovima za kombinovanje više logičkih izraza. Primeri logičkih operatora su:- && - 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=4,b=7, c=11- 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) && false)
= !(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 || !(4 > 1)
= true || !(true)
= true || false
= true
Objašnjenje:
4 != 0je true, jer je4različito od0.- Izraz
(7 > 11)je false, jer7nije veće od11. - Zatim,
4 > falsetretirafalsekao0, 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.
usingnamespacestd;
intmain(){
boole, 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>
intmain(){
inta = 10;
intb = 20;
intc = 15;
// Prvo koristimo relacione operatore da dobijemo booleanske vrednosti
booluslov1 = (a < b);// true jer je 10 manje od 20
booluslov2 = (c == 15);// true jer je c jednako 15
// Zatim koristimo logičke operatore da kombinujemo rezultate
boolkonacanRezultat = uslov1 && uslov2;// true jer su oba uslova tačna
printf("Konacan rezultat: %d\n", konacanRezultat);
return0;
}
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 po bitovima omogućavaju izvođenje operacija na nivou bitova unutar celobrojnih podataka. Postoje dve grupe operatora 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
Npr. za podatke tipa int koji imaju po 16 bitova memorije:- 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
Osnovni operator dodele je operator =, kojim se jedna vrednost dodeljuje drugoj. U C, C++ postoje i operatori dodele kojim se odjednom izvršava više operacija. Pretpostavimo da želite da saberete vrednost promenljive sa nekim brojem i da rezultat dodelite istoj promenlivoj. Napisali biste: i = i + 2; Skraćeno se ovo može napisati pomoću operatora += na sledeći način: i += 2; Prethodna dva izraza su ekvivalentna. U tabeli koja sledi su dati neki od operatora ovog tipa:| 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: ? :
Posmatrajmo sledeći problem:
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
Pomoću ovog operatora se može odrediti veličina podatka u bajtovima. Sledeći primer to demonstrira:#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 ","
je binarni operator koji procenjuje svoj prvi operand i odbacuje rezultat, zatim procenjuje drugi operand i vraća ovu vrednost (i tip). Operator zareza ima najniži prioritet bilo kog C operatora. Comma deluje kao operator i separatorJoš po neki operator
Ostali operatori u jeziku C/C++ dati su u sledećoj tabeli:| 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
Kada u izrazu ima više operatora onda se prvo izvršavaju operacije većeg prioriteta. Ako su operatori istog prioriteta, tada će izvršavanje biti sa leva na desno u većini slučajeva(Pogledati kolonu Smer grupisanja u tabeli ispod).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 | , |
Testiraj svoj kod ovde!
Srodni članci
Podaci-primeriJava predavanja
Matematički algoritmi
Priprema za kontrolni
Matrice
