Biologie | Chimie | Didactica | Fizica | Geografie | Informatica | |
Istorie | Literatura | Matematica | Psihologie |
Programare procedurala
Operatori
Operatori aritmetici:
Tip |
Operator |
Observatii |
Unari |
Determina semnul operatorului |
|
Operatori de incrementare respectiv decrementare. Aplicarea operatorului inaintea variabilei are ca rezultat intai incrementarea variabilei, apoi utilizarea acesteia. Exemplu: pentru x=3 in urma instructiunii y=++x; se obtine: y=4, x=4 Aplicarea operatorului ++ (--) dupa variabila are ca rezultat intai utilizarea variabiulei si apoi incrementarea. Exemplu: pentru x=3 in urma instructiunii y=++x; se obtine: y=3, x=4 |
||
Binari |
Pentru tipuri de date intregi, reprezinta impartirea intreaga (echivalentul lui DIV din Pascal) |
|
Se utilizeaza pentru tipuri intregi si reprezinta restul impartirii unui numar la altul (echivalentul lui MOD din Pascal) |
||
Expresia x+=y este echivalenta cu x=x+y |
Operatori relationali: <, >, <= (mai mic sau egal), >= (mai mare sau egal), (egalitate), (diferit).
Operatori logici:
Tip |
Operator |
Observatii |
Unari |
Negare. Daca x este nenul, !x=0 Daca x este !x=1; |
|
Binari |
&& |
Operatorul "si" logic. x&&y este 1 daca si numai daca si x si y sunt nenuli. x&&y este 0 daca sau x sau y este nul |
Operatorul "sau" logic. x||y este 1 daca si numai daca cel putin unul dintre operanzi este nenul x||y este 0 daca si numai daca ambii operanzi sunt 0 |
Operatori logici pe biti:
Sunt aplicabili numai pentru tipuri intregi (int, unsigned int, char, unsigned char, etc.).
Operatorii logici pe biti opereaza asupra reprezentarii binare a numerelor. Pentru exemplificare consideram urmatoarele variabile date pe 8 biti a b (cu valori de la 0 la 255).
a=(0,0,0,0,0,1,1,1) si are valoare 7
b=(0,0,0,0,1,0,1,1) si are valoarea 11.
Tip |
Operator |
Observatii |
Unar |
Negare pe biti ~a=(1,1,1,1,1,0,0,0) ~b=(1,1,1,1,0,1,0,0) |
|
Binari |
& |
Operatorul "si" logic pe biti. a&b=(0,0,0,0,0,0,1,1) |
Operatorul "sau" logic pe biti. a|b=(0,0,0,0,1,1,1,1) |
||
Operatorul sau exclusiv. Rezultatul este 1 daca si numai daca unul dintre operanzi este 1 si celalalt 0. a^b=(0,0,0,0,1,1,0,0) |
||
<< |
Deplasare (shift-are) la stanga pe biti. a<<1=(0,0,0,0,1,1,1,0)=14 b<<2=(0,0,1,0,1,1,0,0)=44 |
|
>> |
Deplasare (shift-are) la derapta pe biti. a<<1=(0,0,0,0,0,0,1,1)=3 b<<2=(0,0,0,0,0,0,1,0)=2 |
Observatii
Operatiile la nivel de bit nu modifica valoarea operanzilor. Prin instructiunea x<<3; nu se modifica valoarea lui x. Daca dorim acest lucru trebuie utilizata instructiunea x=x<<3;
Daca o variabila este de tip intreg cu semn (int, char) atunci primul bit din stanga reprezinta semnul variabilei si nu se modifica prin deplasare (<< sau >>
Exemple
Suma a doua numere intregi folosind ^ si & pe biti
#include<stdio.h>
void main()
printf("suma=%d",suma);
Interschimbarea a doua variabile fara utilizarea unei variabile auxiliare:
#include<stdio.h>
void main()
Operatorul de decizie ternar alcatuit din operatorii ? si :
expresie_1 ? expresie _2 : expresie_3
Daca expresie_1 are valoare nenula atunci valoarea expresiei conditionale ia valoarea expresie_2, altfel ia valoarea expresie_3
Exemplu: maximul a doua numere
#include<stdio.h>
void main()
Operatorul sizeof: are ca rezultat numarul de octeti utilizati pentru memorarea rezultatului evaluarii unei expresii:
Exemple sizeof(int) = 4
sizeof(char) = 1
sizeof(1.5) = 8 (dimensiunea in unei var de tip double)
sizeof('a') = 1
Prioritatea (precedenta) operatorilor:
Rezultatul operatorilor dintr-o expresie aritmetica / logica se evalueaza intr-o anumita ordine data de precedenta acestor operatori. Operatorii cu cea mai mare prioritate sunt evaluati mai intii. In tabelul urmator este prezentata precedenta operatorilor numerotata de la 1 (precedenta maxima) la 14 (precedenta minima).
-> . |
Paranteze, operatorii pentru membrii de structuri/obiecte |
|
unar unar) * & sizeof type cast ++x --x |
(majoritatea) operatorilor unari, |
|
Inmultirea, impartirea, modulo |
||
Adunarea si scaderea |
||
<< >> |
Deplasare pe biti la stanga si dreapta |
|
< <= > >= |
Operatorii de comparatie mai mic, mare |
|
Comparatie: egal, diferit |
||
& |
"Si" pe biti |
|
XOR ("sau" exclusiv) pe biti |
||
"sau" pe biti |
||
&& |
"si" logic |
|
"sau" logic |
||
Operatorul conditional ternar |
||
= += -= *= /= %= &= |= ^= <<= >>= |
Operatorii de atribuire |
Execitii si probleme
Care dintre urmatoarele expresii sunt adevarate daca si numai daca numarul intreg x este impar negativ?
a) (x%2==1) && (x<0)
b) (x%2!=0) || (x<0)
c) !((x%2==0) || (x>=0))
d) !((x%2==0) && (x>=0))
e) x%2=1 && x<0
Se considera x, y si z variabile intregi. Care dintre urmatoarele expresii are valoarea diferita de 0 daca si numai daca y=max(x,y,z)
a) x>z?y>=x?1:0:y>=z?1:0
b) !(y<x || y<z)
c) !(y<x && y<z)
d) x>z && y>x || z>x && y>z
Pentru a atribui variabilei reale x rezultatul expresiei , unde a, b si c sunt variabile reale, se utilizeaza instructiunea:
a) x = (2*a*b)-(c*c)/0.25;
b) x = 2*a*b - c*c/0.25;
c) x = (2*a*b) - (c*c)*4;
d) x = (2*a*b - c*c)*4;
Sa se scrie un program care sa calculeze minimul dintr-un vector folosind operatorul conditional ternar in locul instructiunii if
Sa se scrie un program care citeste n numere si calculeaza suma celor pozitive si produsul celor negative. Utilizati operatorul conditional ternar.
Fie x un numar natural. Scrieti un program care sa utilizeze operatori logici pe biti asfel incat:
a) Sa inmulteasca variabila x cu 2n (0 £ n £
b) Sa imparta variabila x cu 2n (0 £ n £
c) Sa returneze valoarea 1 daca si numai daca x este impar
d) Sa aiba returneze 0 daca si numai daca bitul n (0 £ n £ 15) din x este 0.
e) Sa seteze bitul n (0 £ n £ 15) din x la 1
Scrieti un program care inverseaza bitii unei variabile de tip int si returneaza valoarea obtinuta.
*Afisati forma binara a unui numar x (0 £ x £ 255) utilizand operatii pe biti. (Consideram reprezentarea pe 8 biti). Generalizare pentru orice intreg.
*Scrieti un program care permuta cei n biti ai unu numar n (0 £ x £255) cu o pozitie spre dreapta (folosind operatii pe biti) si afisati in forma binara. (Consideram reprezentarea pe 8 biti).
Copyright © 2024 - Toate drepturile rezervate