Отпремање презентације траје. Молимо да сачекате

Отпремање презентације траје. Молимо да сачекате

Оператори и изрази Аритметички оператори Оператори на нивоу битова

Сличне презентације


Презентација на тему: "Оператори и изрази Аритметички оператори Оператори на нивоу битова"— Транскрипт презентације:

1 Оператори и изрази Аритметички оператори Оператори на нивоу битова
Логички оператори Релациони оператори Оператори доделе Оператори референцирања и дереференцирања Оператори за рад са динамичком меморијом Остали оператори Изрази

2 Аритметички оператори
Оператор Значење Асоцијативност Лвр. Употреба * множење лево не izraz * izraz / дељење izraz / izraz % остатак izraz % izraz + сабирање izraz + izraz - одузимање izraz – izraz унарни плус десно +izraz унарни минус -izraz ++ префиксни инкремент да ++lvrednost -- префиксни декремент --lvrednost постфиксни инкремент lvrednost++ постфиксни декремент lvrednost--

3 Аритметички оператори
int x=0; int y=++x; // x postaje 1, kao i y ++x=--y; // ++x je lvrednost; x postaje 0 kao i y

4 Аритметички оператори
for ( ; *q++ = *p++;); // kopira niz znakova na koji // ukazuje p u niz lokacija u // memoriji na koje ukazuje q

5 Оператори на нивоу битова
Значење Асоцијативност Лвр. Употреба << Померање улево лево не izraz<<izraz >> Померање удесно izraz>>izraz & логичко I по битовима izraz & izraz | логичко ILI по битовима izraz | izraz ~ логичко NE по битовима десно ~izraz ^ логичко искључиво ILI по битовима izraz^izraz

6 Оператори на нивоу битова
if (status & 0x80) // da li je bit 7 objekta // status jednak 1 extern unsigned flag; const unsigned mask = ~3U; // komplement od 3 kao // neoznacen broj flag=flag & mask; // brise dva bita // najmanje tezine // promenljive flag

7 Логички оператори Оператор Значење Асоцијативност Лвр. Употреба &&
логичко I лево не izraz&&izraz || логичко ILI izraz||izraz ! логичко NE десно ! izraz

8 Логички оператори if (1 || f()) // funkcija f se nikada ne poziva for (int i=0; *p++ && *q++; i++) // petlja koja // prolazi kroz // stringove dok // se na naidje na // kraj jednog od // njh

9 Релациони оператори Оператор Значење Асоцијативност Лвр. Употреба <
мање лево не izraz<izraz > веће izraz>izraz <= мање или једнако izraz<=izraz >= веће или једнако izraz>=izraz == једнако izraz==izraz != различито izraz!=izraz

10 Оператори доделе Оператор Значење Асоцијативност Лвр. Употреба =
Проста додела десно да lvrednost=izraz *= Множење и додела lvrednost*=izraz /= Дељење и додела lvrednost/=izraz %= Остатак и додела lvrednost%=izraz += Сабирање и додела lvrednost+=izraz -= Одузимање и додела lvrednost-=izraz >>= Померање удесно и додела lvrednost>>=izraz <<= Померање улево и додела lvrednost<<=izraz &= I и додела lvrednost&=izraz ^= Искључиво ILI и додела lvrednost^=izraz |= ILI и додела lvrednost|=izraz

11 E1 се израчунава само једном
Оператори доделе E1 op= E2  E1 = E1 op E2 E1 се израчунава само једном

12 Оператори доделе flag &= (mask<<2); // ovde se mask ne menja mask <<=2; // ovde se mask menja a=b=c; // isto kao a=(b=c), i a i b dobijaju // vrednost c (a=b)=c; // a dobije vrednost b a onda // vrednost c; b se ne menja

13 Оператори доделе Код просте доделе, када су операнди аритметичког типа, десни операнд се конвертује у тип левог операнда. Ако је леви операнд типа набрајања, и десни мора да буде истог типа. Ако је леви операнд типа показивача, и десни операнд мора да буде типа показивача или константни израз једнак 0.

14 Оператори референцирања и дереференцирања
Значење Асоцијативност Лвр. Употреба * Дереференцирање показивача десно да *izraz . Непосредни приступ члану лево да/не izraz.ime -> Посредни приступ члану izraz->ime & Узимање адресе не &lvrednost

15 Оператори референцирања и дереференцирања
E1 -> E2  (*E1).E2 void swap(int *x, int *y) { int temp=*x; *x=*y; *y=temp; } void main () { int a=1, b=2; swap (&a, &b); // …

16 Оператори за рад са динамичком меморијом
Динамички објекти имају животни век који није одређен облашћу важења већ је под контролом програмера. Смештају се у посебну меморијску област (динамичку меморију) одакле им се додељује простор приликом креирања који се ослобађа код укидања.

17 Оператори за рад са динамичком меморијом
Креирање објеката врши се оператором new а укидање оператором delete. Операција new подразумева: Одвајање простора у динамичкој меморији потребног за смештање објекта; Иницијализацију тог објекта (по потреби се позива конструктор); Враћање показивача на наведени тип објекта.

18 Оператори за рад са динамичком меморијом
int *p=new int; // kreira se dinamicki objekat tipa int // a na njega ukazuje p *p=3; // objekat dobija vrednost 3 (*p)++; // objekat je sada 4 int i=*p; // promenljiva i postaje 4

19 Оператори за рад са динамичком меморијом
int *pi=new int(3);// kreira se dinamicki objekat tipa int // i inicijalizuje na 3 osoba *po=new osoba(“Petar Petrovic”,40); int i=*new int(3); // dinamicki objekat je izgubljen int j=new int(4); // greska: new vraca pokazivac

20 Оператори за рад са динамичком меморијом
Тип иза оператора new мора да буде тип објекта али не и функције, мада је дозвољено да буде показивач на функцију. Aко се креира динамички објекат изведеног типа, осим показивача и низова, назив типа се наводи унутар заграда.

21 Оператори за рад са динамичком меморијом
int i=0; int **ppi=new int* (&i); // dinamicki objekat je // tipa int* i moze ovo extern int f(); int (*ppf) () =new (int (*) ()) (&f); // dinamicki objekat je // tipa int(*)() pa tip // mora u zagrade

22 Оператори за рад са динамичком меморијом
Оператором delete укида се динамички објекат претходно креиран помоћу оператора new, а аргумент јој је показивач на тај објекат.

23 Оператори за рад са динамичком меморијом
int *pi=new int(3); osoba *po=new osoba(“Petar Petrovic”,40); // … delete pi; delete po;

24 Оператори за рад са динамичком меморијом
Динамички низови се креирају помоћу оператора new наводећи тип низа и димензије. Оператор new враћа показивач на први елемент низа.

25 Оператори за рад са динамичком меморијом
int *pi = new int[10]; // new int […] vraca int* for (int i=0; i<10; i++) pi[i]=i; // i+1-vi element se // inicijalizuje na i

26 Оператори за рад са динамичком меморијом
Оператор delete враћа резултат типа void. Објекат укинут на овај начин престаје да живи а бивши показивач на њега је недефинисан. Динамички низови укидају се помоћу исказа delete [] izraz

27 Оператори за рад са динамичком меморијом
Показивач на константни објекат не сме да буде аргумент операције delete.

28 Оператори за рад са динамичком меморијом
void g(const int *p) { // obecali smo da se *p // nece menjati delete p; // pa je ovo greska! } void f() { int *p=new int(3); g(p); if (*p !=3) // sta ce biti?!? // …

29 Остали оператори Оператор индексирања [] је бинарни оператор.
Један од операнда је показивач на тип Т а други је целобројан. Враћа се резултат типа Т. Израз E1[E2] еквивалентан је изразу *((E1)+(E2)) као и изразу E2[E1].

30 Остали оператори char *s=“Zdravo!”; s+=6; char c=s[-4]; // c je sada *(s-4), tj. ‘r’ // celobrojni operand moze biti i // negativan ukoliko rezultujuci // pokazivac ukazuje na element niza

31 Остали оператори Оператор позива функције () захтева да испред заграда буде операнд једног од следећих типова: функција која враћа тип Т; показивач на функцију која враћа тип Т; референца на функцију која враћа тип Т; Резултат је типа Т који је лвредност само ако функција враћа референцу.

32 Остали оператори Између заграда се наводи листа израза раздвојених зарезом који представљају стварне аргументе. Листа може бити и празна.

33 Остали оператори Оператор услова ? Користи се у изразу облика Е1?Е2:Е3
који има вредност Е2 ако је Е1!=0, односно Е3 ако није.

34 Остали оператори int fact (int n) { if (1<n) return n*fact(n-1); else return 1; return (1<n)?(n*fact(n-1)):1;

35 Остали оператори Оператор секвенце , се користи када желимо да извршимо неколико операција тамо где се по синтакси очекује једна. Израз Е1, Е2 има вредност Е2 али се пре њега израчунава Е1.

36 Остали оператори Посматрајмо следећу петљу: for (; *p && *q;) { // …
}

37 Остали оператори Сажетије је могло и: for (; *p && *q; p++,q++) { // …
}

38 Остали оператори Оператор величине sizeof представља величину објекта неког типа изражену у бајтовима. Тачније, sizeof(char) је увек 1, што се поклапа са једним бајтом тамо где се знакови представљају једним бајтом. int a[10]; const int i=sizeof(a); // i=10*sizeof(int)

39 Остали оператори Оператор експлицитне конверзије () може се користити у облику T(E) или (T)E са значењем да се израз Е конвертује у тип Е. extern double poeni; int ocena=(int(poeni+0.5)+5)/10;

40 Остали оператори Оператор разрешења области важења :: може се употребити на два начина: ::ime ime_klase::ime. Први случај се користи када се жели приступ глобалном имену које је сакривено неким другим.

41 Остали оператори int x=0; void f() { ::x++; // pristup globalnom x }

42 Остали оператори Други случај представља обраћање имену које има области важења класе, а сам приступ је ван те области. void osoba::ko_si(){ // pristupa se u oblasti fajla //… a ime ko_si ima oblast klase // osoba }

43 Изрази Израз је исказ који се састоји од оператора и операнада и дефинише неку обраду. Израз може да има неку вредност али и не мора (тип void). Израз може да има и споредне ефекте.


Скинути ppt "Оператори и изрази Аритметички оператори Оператори на нивоу битова"

Сличне презентације


Реклама од Google