Sunteți pe pagina 1din 3

Operatorul de conversie explicită

Pentru forţarea tipului unui operand se foloseşte o construcţie de forma:

(tip) operand

Prin aceasta valoarea operandului se converteşte spre tipul indicat în paranteze.

Exemplu:

int i,j;

double y;

i=8; j=5;

y=i/j; // y are valoarea 1, pentru ca se face impartirea intreaga i/j

Dacă vom converti operanzii i şi j spre tipul double se va obţine rezultatul corect adică 1.6.

Deci:

int i,j;

double y;

i=8; j=5;

y=(double) i / (double) j; // y are valoarea 1.6,

Construcţia (tip) este un operator unar prin care se explicitează conversia dorită. Are aceeaşi
prioritate ca restul operatorilor unari.

Operatorul dimensiune (sizeof)


Pentru a determina lungimea în octeţi a unei date se poate folosi construcţia:

sizeof (data)

unde data poate fi:

numele unei variabile simple;

numele unui tablou;

numele unei structuri;

numele unui tip;


referirea la elementul unui tablou sau structură.

Exemple:

int i;

long l;

float f;

double d;

char c;

int itablou[5];

double dtablou[5];

sizeof (i) // are valoarea 2;

sizeof (l) // are valoarea 4;

sizeof (f) // are valoarea 4;

sizeof (d) // are valoarea 8;

sizeof (c) // are valoarea 1;

sizeof (itablou[1]) // are valoarea 2;

sizeof (dtablou[1]) // are valoarea 8;

sizeof (itablou) // are valoarea 10;

sizeof (dtablou) // are valoarea 40

Regula conversiilor implicite


În general o expresie C conţine operanzi de tipuri diferite. Pentru operatorii binari există
situaţii când operanzii nu sunt de acelaşi tip şi trebuie executate conversii astfel încât
operatorii să se aplice pentru operanzi de acelaşi tip. Aceste conversii le face automat
compilatorul. Există o regulă a conversiilor implicite care are următorii paşi:

fiecare operand de tip char se converteşte spre tipul int şi fiecare operand de tipul float se
converteşte spre double;

dacă unul dintre operanzi este de tip double atunci şi celălalt se converteşte spre tipul double
şi rezultatul va avea tipul double;
dacă unul dintre operanzi este de tip long, atunci şi celălalt se converteşte spre tipul long şi
rezultatul va avea tipul long;

dacă unul dintre operanzi este de tip unsigned, atunci şi celălalt se converteşte spre tipul
unsigned şi rezultatul va fi de tipul unsigned;

la acest pas se ajunge numai dacă ambii operanzi sunt de tip int şi deci operaţia se execută cu
operanzii respectivi, iar rezultatul va fi de tip int.

Aplicând regula de mai sus pas cu pas (la fiecare operator în momentul efectuării lui), se
ajunge în final la evaluarea întregii expresii şi prin acesta se determină tipul expresiei. Regula
conversiilor implicite nu se aplică pentru operatorul de atribuire (valoarea expresiei din partea
dreaptă a semnului de atribuire se converteşte spre tipul variabilei din stânga semnului egal).

Dacă rezultatul unei operaţii depăşeşte domeniul de valori ce corespunde tipului rezultatului,
valoarea respectivă se trunchiază şi rezultatul este eronat.

S-ar putea să vă placă și