+ All Categories
Home > Documents > ARCSO - Arhitectura calculatorului si sisteme de operareusers.utcluj.ro/~simona/pclp/pclp4.pdf ·...

ARCSO - Arhitectura calculatorului si sisteme de operareusers.utcluj.ro/~simona/pclp/pclp4.pdf ·...

Date post: 09-Feb-2020
Category:
Upload: others
View: 12 times
Download: 0 times
Share this document with a friend
35
PCLP4 - 1 Operatori
Transcript
Page 1: ARCSO - Arhitectura calculatorului si sisteme de operareusers.utcluj.ro/~simona/pclp/pclp4.pdf · 2017-10-26 · PCLP4 - 4 Operatori (1) • Expresie –un operand sau mai multi conectati

PCLP4 - 1

Operatori

Page 2: ARCSO - Arhitectura calculatorului si sisteme de operareusers.utcluj.ro/~simona/pclp/pclp4.pdf · 2017-10-26 · PCLP4 - 4 Operatori (1) • Expresie –un operand sau mai multi conectati

PCLP4 - 2

In cursul trecut

• Functia de intrare scanf()

• Alte functii de intrare/iesire

Page 3: ARCSO - Arhitectura calculatorului si sisteme de operareusers.utcluj.ro/~simona/pclp/pclp4.pdf · 2017-10-26 · PCLP4 - 4 Operatori (1) • Expresie –un operand sau mai multi conectati

PCLP4 - 3

In cursul de astazi• Operatorii aritmetici

• Operatorii de incrementare/decrementare

• Operatorii booleeni

• Operatorii de atribuire

• Operatorul conditional, operatorul dimensiune

• Operatorii de fortare a tipului, operatorul virgula

• Operatorii paranteza

• Alti operatori

• Precedenta si asociativitatea operatorilor

Page 4: ARCSO - Arhitectura calculatorului si sisteme de operareusers.utcluj.ro/~simona/pclp/pclp4.pdf · 2017-10-26 · PCLP4 - 4 Operatori (1) • Expresie –un operand sau mai multi conectati

PCLP4 - 4

Operatori (1)• Expresie – un operand sau mai multi conectati prin

operatori

• Operanzi

– constante

– variabile

– nume tablou

– nume tip de data

– elementele unui tablou

– apelul unei functii

– expresie intre paranteze

Page 5: ARCSO - Arhitectura calculatorului si sisteme de operareusers.utcluj.ro/~simona/pclp/pclp4.pdf · 2017-10-26 · PCLP4 - 4 Operatori (1) • Expresie –un operand sau mai multi conectati

PCLP4 - 5

Operatori (2)

• aritmetici

• de incrementare/decrementare

• booleeni

• de atribuire

• conditional

• dimensiune

• de fortare a tipului

• virgula

• paranteza

Page 6: ARCSO - Arhitectura calculatorului si sisteme de operareusers.utcluj.ro/~simona/pclp/pclp4.pdf · 2017-10-26 · PCLP4 - 4 Operatori (1) • Expresie –un operand sau mai multi conectati

PCLP4 - 6

Operatori aritmetici (1)• inmultire - *

• impartire - /

• modulo - % (doar pentru numere intregi)

• adunare - +

• scadere - -

Obs:

- se efectueaza *, / si % de la stanga la dreapta si

apoi + si – tot de la stanga la dreapta

- operatori binari

Page 7: ARCSO - Arhitectura calculatorului si sisteme de operareusers.utcluj.ro/~simona/pclp/pclp4.pdf · 2017-10-26 · PCLP4 - 4 Operatori (1) • Expresie –un operand sau mai multi conectati

PCLP4 - 7

Operatori aritmetici (2)

• exemple:

4*5/2+5%2 = 20/2+1 = 10+1 =11

17%2 = 1

17.0 % 2 = operatie ilegala

17/2 = 8

17.0/2 = 8.5

x=17800+24000-24000 = 41800 -24000

depasire in int

Page 8: ARCSO - Arhitectura calculatorului si sisteme de operareusers.utcluj.ro/~simona/pclp/pclp4.pdf · 2017-10-26 · PCLP4 - 4 Operatori (1) • Expresie –un operand sau mai multi conectati

PCLP4 - 8

Operatori aritmetici (3)

Regula conversiilor implicite – daca operatorul

binar se aplica la operanzi de tipuri diferite:

– char si enum -> int

– un operand long double ->long double

– un operand double -> double

– un operand float -> float

– un operand unsigned long -> unsigned long

– un operand long int -> long int

– unsigned si int -> int

Page 9: ARCSO - Arhitectura calculatorului si sisteme de operareusers.utcluj.ro/~simona/pclp/pclp4.pdf · 2017-10-26 · PCLP4 - 4 Operatori (1) • Expresie –un operand sau mai multi conectati

PCLP4 - 9

Operatori aritmetici (4)

Exemplu:

int i;

long double a;

b = 3 * a + i;

long double

Page 10: ARCSO - Arhitectura calculatorului si sisteme de operareusers.utcluj.ro/~simona/pclp/pclp4.pdf · 2017-10-26 · PCLP4 - 4 Operatori (1) • Expresie –un operand sau mai multi conectati

PCLP4 - 10

Operatori de incrementare/decrementare (1)

• incrementare - ++

preincre. ++x → x = x + 1 ← x++ postincre.

• decrementare - --

predecre. --x → x = x – 1 ← x-- postdecre.

Obs:

– operatori unari

– se aplica numai intregilor

Page 11: ARCSO - Arhitectura calculatorului si sisteme de operareusers.utcluj.ro/~simona/pclp/pclp4.pdf · 2017-10-26 · PCLP4 - 4 Operatori (1) • Expresie –un operand sau mai multi conectati

PCLP4 - 11

Operatori de incrementare/decrementare (2)#include <stdio.h>

void main()

{ int x = 5, y = 10;

printf("x = %d\n", ++x);

printf("x = %d\n", --x);

printf("y = %d\n", (y = ++x - 2));

x = 5;

printf("y = %d\n", (y = x++ - 2));

printf("x = %d\n", x);

x = 0;

printf("y = %d\n", (y = x-- -1));

printf("x = %d\n", x);

}

x = 6

x = 5

y = 4

y = 3

x = 6

y = -1

x = -1

Page 12: ARCSO - Arhitectura calculatorului si sisteme de operareusers.utcluj.ro/~simona/pclp/pclp4.pdf · 2017-10-26 · PCLP4 - 4 Operatori (1) • Expresie –un operand sau mai multi conectati

PCLP4 - 12

Operatori booleeni (1)- genereaza un rezultat logic TRUE (≠ 0) sau FALSE (0)

– relationali

– logici

– logici pe biti

1. Operatori relationali

– permit compararea a doua valori de acelasi tip

– se pot compara doua variabile sau expresii

– exceptie: int se poate compara cu float

– ==, !=, <, <=, >, >=

– au prioritate mai mica decat operatorii aritmetici si de

incr/decr

Page 13: ARCSO - Arhitectura calculatorului si sisteme de operareusers.utcluj.ro/~simona/pclp/pclp4.pdf · 2017-10-26 · PCLP4 - 4 Operatori (1) • Expresie –un operand sau mai multi conectati

PCLP4 - 13

Operatori booleeni (2)Exemple:

5 == 5 → 1 (TRUE)

0.025 >= 0.333 → 0 (FALSE)

3 != 3 → 0 (FALSE)

-45.2 < -3 → 1 (TRUE)

'A' < 'Z' → 1 (TRUE)

int x=25, y=-10; x<=y → 0 (FALSE)

Page 14: ARCSO - Arhitectura calculatorului si sisteme de operareusers.utcluj.ro/~simona/pclp/pclp4.pdf · 2017-10-26 · PCLP4 - 4 Operatori (1) • Expresie –un operand sau mai multi conectati

PCLP4 - 14

Operatori booleeni (3)

2. Operatori logici

! - negatia logica (NOT) – operator unar,

prioritate mai mare decat operatorii

multiplicativi

A !A

0

1

1

0

Page 15: ARCSO - Arhitectura calculatorului si sisteme de operareusers.utcluj.ro/~simona/pclp/pclp4.pdf · 2017-10-26 · PCLP4 - 4 Operatori (1) • Expresie –un operand sau mai multi conectati

PCLP4 - 15

Operatori booleeni (4)

&& - SI logic (AND) – operator binar, are prioritate

mai mica decat operatorul de egalitate

A B A&&B

0

0

1

1

0

1

0

1

0

0

0

1

Page 16: ARCSO - Arhitectura calculatorului si sisteme de operareusers.utcluj.ro/~simona/pclp/pclp4.pdf · 2017-10-26 · PCLP4 - 4 Operatori (1) • Expresie –un operand sau mai multi conectati

PCLP4 - 16

Operatori booleeni (5)

|| - SAU logic (OR) – operator binar, are

prioritate mai mica decat operatorul &&

A B A|| B

0

0

1

1

0

1

0

1

0

1

1

1

Obs: expresia se evalueaza de la stanga la dreapta. Daca se

ajunge intr-un punct in care se cunoaste valoarea de adevar a

intregii expresii, atunci restul expresiei nu se mai evalueaza.

Page 17: ARCSO - Arhitectura calculatorului si sisteme de operareusers.utcluj.ro/~simona/pclp/pclp4.pdf · 2017-10-26 · PCLP4 - 4 Operatori (1) • Expresie –un operand sau mai multi conectati

PCLP4 - 17

Operatori booleeni (6)3. Operatori logici pe biti

se aplica la operanzi de tip intreg

~ - complement fata de 1, operator unar

& - SI logic pe biti

| - SAU logic pe biti

^ - SAU EXCLUSIV logic pe biti

<< - deplasare stanga

>> - deplasare dreapta

A B A^B

0

0

1

1

0

1

0

1

0

1

1

0

Page 18: ARCSO - Arhitectura calculatorului si sisteme de operareusers.utcluj.ro/~simona/pclp/pclp4.pdf · 2017-10-26 · PCLP4 - 4 Operatori (1) • Expresie –un operand sau mai multi conectati

PCLP4 - 18

Operatori booleeni (7)Exemple:

int a = 9; → 00001001

~a → 11110110

a << 3 → 01001000

a >> 2 → 00000010

int a = 6; → 00000110

int b = 10; → 00001010

a & b → 00000010

a | b → 00001110

a ^ b → 00001100

Page 19: ARCSO - Arhitectura calculatorului si sisteme de operareusers.utcluj.ro/~simona/pclp/pclp4.pdf · 2017-10-26 · PCLP4 - 4 Operatori (1) • Expresie –un operand sau mai multi conectati

PCLP4 - 19

Operatori booleeni (8)Exemplu: Se citeste un numar si daca este in intervalul

[0,100] se afiseaza 1, altfel se afiseaza 0.

#include <stdio.h>

int main()

{ double a;

printf (″Introduceti numarul:″);

scanf (″%lf″, &a);

printf (″a=%lf\t%d\n″,a, a>=0 && a<=100);

return 0;

}

Page 20: ARCSO - Arhitectura calculatorului si sisteme de operareusers.utcluj.ro/~simona/pclp/pclp4.pdf · 2017-10-26 · PCLP4 - 4 Operatori (1) • Expresie –un operand sau mai multi conectati

PCLP4 - 20

Operatori de atribuire (1)

1. Atribuire simpla =

v = expresie

ex. a = 17;

pi = 3.14;

tensiune = rezistenta * curent;

v = a + v1;

Obs. - asociativitate de la dreapta la stanga

Page 21: ARCSO - Arhitectura calculatorului si sisteme de operareusers.utcluj.ro/~simona/pclp/pclp4.pdf · 2017-10-26 · PCLP4 - 4 Operatori (1) • Expresie –un operand sau mai multi conectati

PCLP4 - 21

Operatori de atribuire (2)

2. Atribuire compusa op=

unde op poate fi: /, *, %, -, +, <<, >>, &, ^, |

si unde:

v op= expresie ≡ v = v op (expresie)

ex.:

i += 9; ≡ i = i + 9;

i *= j +7; ≡ i = i * (j + 7);

int a = 9;

a >>= 2; ≡ a = a >> 2; → a = 2

Page 22: ARCSO - Arhitectura calculatorului si sisteme de operareusers.utcluj.ro/~simona/pclp/pclp4.pdf · 2017-10-26 · PCLP4 - 4 Operatori (1) • Expresie –un operand sau mai multi conectati

PCLP4 - 22

Operatori de atribuire (3)Exemplu: Sa se calculeze valorile expresiilor 2x2+3x si

2x2+3x-10 pentru x citit de la consola.

#include <stdio.h>

int main()

{ double x, y;

printf(″introduceti numarul:″);

scanf(″%lf″, &x);

printf(″x=%.2lf, y=2*x*x+3*x=%.2lf\n″, x, y=2*x*x+3*x );

y -= 10;

printf(″x=%.2lf, y=2*x*x+3*x-10=%.2lf\n″, x, y);

return 0;

}

Page 23: ARCSO - Arhitectura calculatorului si sisteme de operareusers.utcluj.ro/~simona/pclp/pclp4.pdf · 2017-10-26 · PCLP4 - 4 Operatori (1) • Expresie –un operand sau mai multi conectati

PCLP4 - 23

Operatorul conditional (1)expresie1 ? expresie2 : expresie3

- expresie1 este o conditie

ex. int a = 9, b = 14;

b = (b>a)?(a+1):(a-1);

Exemplul 1: Afisarea valorii absolute a unui numar.

#include <stdio.h>int main(){ int a;

scanf(″%d″, &a);printf(″a=%d\tabs(a)=%d\n″, a, a<0 ? –a : a);return 0;

}

Page 24: ARCSO - Arhitectura calculatorului si sisteme de operareusers.utcluj.ro/~simona/pclp/pclp4.pdf · 2017-10-26 · PCLP4 - 4 Operatori (1) • Expresie –un operand sau mai multi conectati

PCLP4 - 24

Operatorul conditional (2)

Exemplul 2: Sa se afiseze minimul dintre valorile a

doua numere intregi citite de la consola.

#include <stdio.h>

int main()

{ int x, y;

printf(″introduceti numerele:″);

scanf(″%d%d″, &x, &y);

printf(″x=%d, y=%d, min(x,y)=%d\n″,x, y, x<y?x:y);

return 0;

}

Page 25: ARCSO - Arhitectura calculatorului si sisteme de operareusers.utcluj.ro/~simona/pclp/pclp4.pdf · 2017-10-26 · PCLP4 - 4 Operatori (1) • Expresie –un operand sau mai multi conectati

PCLP4 - 25

Operatorul conditional (3)Exemplul 3: Sa se afiseze minimul dintre valorile

absolute a doua numere intregi citite de la consola.

#include <stdio.h>

int main(){ int x, y, a, b;

printf(″introduceti numerele:″); scanf(″%d%d″, &x, &y);printf(″x=%d, y=%d, abs(x)=%d, abs(y)=%d\n″,x, y,\

a=x<0?–x:x, b=y<0?-y:y);printf(″min( abs(x),abs(y))=%d\n″, a<b?a:b);return 0;

}

Page 26: ARCSO - Arhitectura calculatorului si sisteme de operareusers.utcluj.ro/~simona/pclp/pclp4.pdf · 2017-10-26 · PCLP4 - 4 Operatori (1) • Expresie –un operand sau mai multi conectati

PCLP4 - 26

Operatorul dimensiune- operator unar cu precedenta mare

sizeof data

sizeof (tip)ex.1 int x, y;

printf(″y = %d\n″, y = sizeof x);

ex.2 double x[8];int a, b;a = sizeof x[4];b = sizeof x;

ex.3 a = sizeof (char);

a 8

y 4

b 64

a 1

Page 27: ARCSO - Arhitectura calculatorului si sisteme de operareusers.utcluj.ro/~simona/pclp/pclp4.pdf · 2017-10-26 · PCLP4 - 4 Operatori (1) • Expresie –un operand sau mai multi conectati

PCLP4 - 27

- operator unar cu precedenta mare

(tip) operandExemplul 1: Calculeaza radacina patrata a unui

numar intreg citit de la consola.

#include <stdio.h>#include <math.h>int main(){ int nr;

printf(″introduceti numarul:″); scanf(″%d″, &nr);printf(″nr=%d, sqrt(nr)=%lf\n″, nr, sqrt((double)nr));return 0;

}

Operatorul de fortare a tipului (1)

double sqrt(double);

Page 28: ARCSO - Arhitectura calculatorului si sisteme de operareusers.utcluj.ro/~simona/pclp/pclp4.pdf · 2017-10-26 · PCLP4 - 4 Operatori (1) • Expresie –un operand sau mai multi conectati

PCLP4 - 28

Exemplul 2: Afiseaza valoarea expresiei (x+1)/x cu 8

zecimale pentru un numar intreg citit de la consola.

#include <stdio.h>int main(){ int x;

printf(″introduceti numarul:″); scanf(″%d″, &x);printf(″x=%d, (x+1)/x=%.8lf\n″, x, ((double)x+1)/x);return 0;

}

Operatorul de fortare a tipului (2)

(x+1)/x este intreg !!!

Page 29: ARCSO - Arhitectura calculatorului si sisteme de operareusers.utcluj.ro/~simona/pclp/pclp4.pdf · 2017-10-26 · PCLP4 - 4 Operatori (1) • Expresie –un operand sau mai multi conectati

PCLP4 - 29

Operatorul virgulaexpresie1 , expresie2 , expresie3, …, expresieN

Exemplu: Sa se afiseze maximul dintre valorile absolute a doua numere intregi citite de la consola.

#include <stdio.h>int main(){ int x, y, a, b;

printf(″introduceti numerele:″); scanf(″%d%d″, &x, &y);printf(″x=%d, y=%d, max( abs(x),abs(y))=%d\n″, x,\y, ((a=x<0?–x:x), (b=y<0?-y:y), (a>b?a:b)));return 0;

}

Page 30: ARCSO - Arhitectura calculatorului si sisteme de operareusers.utcluj.ro/~simona/pclp/pclp4.pdf · 2017-10-26 · PCLP4 - 4 Operatori (1) • Expresie –un operand sau mai multi conectati

PCLP4 - 30

Operatorii paranteza(expresie)

- au prioritatea cea mai mare

- impun ordinea efectuarii operatiilor

- nu se aplica operatorilor de incrementare/decrementare

si operatorului adresa:

(a+10)++; --(x+y); &(i+j);

[expresie]

- utilizate pentru indicii tablourilor (op. de indexare)

ex.: a[7]; a[2*i+j]

Page 31: ARCSO - Arhitectura calculatorului si sisteme de operareusers.utcluj.ro/~simona/pclp/pclp4.pdf · 2017-10-26 · PCLP4 - 4 Operatori (1) • Expresie –un operand sau mai multi conectati

PCLP4 - 31

Alti operatori• operatorul adresa (de referentiere) – &

• operatorul de indirectare (de dereferentiere) – *

• operatorii de accesare a componentelor unei structuri – . si ->

• operatorii unari + si -

b= +a; b = -a

ex.: int x, *pa, a[10];

pa = &a[7];

x = *pa;

*&x;

Page 32: ARCSO - Arhitectura calculatorului si sisteme de operareusers.utcluj.ro/~simona/pclp/pclp4.pdf · 2017-10-26 · PCLP4 - 4 Operatori (1) • Expresie –un operand sau mai multi conectati

PCLP4 - 32

Precedenta operatorilor( ) [ ] . ->(tip) sizeof ++ -- ! ~ + - & * ←op.unari* / %+ -<< >>< <= > >=== !=&^|&&||?:= += -= *= /= %= <<= >>= &= |= ^=,

Page 33: ARCSO - Arhitectura calculatorului si sisteme de operareusers.utcluj.ro/~simona/pclp/pclp4.pdf · 2017-10-26 · PCLP4 - 4 Operatori (1) • Expresie –un operand sau mai multi conectati

PCLP4 - 33

Asociativitatea operatorilor

• operatorii unari, de atribuire si cel conditional au asociativitatea de la dreapta la stanga

. (tip) sizeof ++ -- ! ~ + - & *

= += -= *= /= %= <<= >>= &= |= ^=

?:

• ceilalti operatori au asociativitatea de la stanga la

dreapta

Page 34: ARCSO - Arhitectura calculatorului si sisteme de operareusers.utcluj.ro/~simona/pclp/pclp4.pdf · 2017-10-26 · PCLP4 - 4 Operatori (1) • Expresie –un operand sau mai multi conectati

PCLP4 - 34

ExempluExemplu: Sa se converteasca litera mica citita in litera mare.

#include <conio.h>int main(){ char c;

c = getche();c = c – ('a' -'A‘);putch(c);return 0;

}sau

#include <conio.h>int main(){ putch(getche() – 'a' +'A' );

return 0;}

Page 35: ARCSO - Arhitectura calculatorului si sisteme de operareusers.utcluj.ro/~simona/pclp/pclp4.pdf · 2017-10-26 · PCLP4 - 4 Operatori (1) • Expresie –un operand sau mai multi conectati

PCLP4 - 35

Codul

ASCII


Recommended