6.8. Tiplərin çevrilməsi əməli
Tiplərin çevirmələrinin iki növü vardır:
-qeyri aşikar çevirmələr;
-aşikar çevirmələr.
Qeyri-aşikar çevirmə zamanı ifadədə iştirak edən operandların tipləri proqramçının müdaxiləsi olmadan uyğun bir tipə çevrilir. Kiçik tip böyük tipə çevrilir. Məsələ, a- dəyişəni həqiqi tip, b və c-dəyişənləri tam tipə aiddirsə, onda
a*b+c*a-ifadəsinin qiyməti həqiqi tipə aid olacaq. Bu ifadədə iştirak edən dəyişənlərin tipində və ifadənin qiymətində qeyri-aşikar tip çevirməsi baş verir.
Tam tiplər üstünlük dərəcəsinin artma sırasına görə aşağıdaki kimidir:
char short int long
Həqiqi tiplər üstünlük dərəcəsinin artma sırasına görə aşağıdaki kimidir.
float double long double
Qeyd edək ki, tam tipləri həqiqi tipə çevirən zaman dəqiqilik itə bilər. Məsələ, 1-ədədinin əvəzinə 0.999 alına bilər. Aşağıda ifadənin qiymətinin hesablanması zamanı əməllərin yerinə yetirilmə ardıcıllığı və tiplərin çevrilməsi nümayiş etdirilmişdir.
Tutaq ki, char ch; int i; float f;
double d; long double r;
r
char
int
int
float
float
double
int
ch 2 (i 0.5) (f d) 7
int
Aşikar tip çevirmələri əməlinin formatı aşağıdaki kimidir:
(tipin adı) operand
Operand sabitlər, dəyişənlər və ifadələr ola bilər. Nəticədə operandın tipi göstərilən tipə çevrilər. Tiplərin aşikar çevirmələrinə aid misallar:
(long)8; (float)a; (int)x%2;
əməli digər binary əməllər kimi üstünlük dərəcəsi böyük olduğuna görə 3-cü ifadədə x dəyişəninin tipi əvvəlcə tam tipə çevrilir və sonra isə modula görə bölmə əməli yerinə yetirilir.
Aşağıdaki proqram fraqmentinə baxaq:
float c;
int a=1, b=2;
c=(float)a/b;
Nəticədə c-dəyişəni 0.5 qiymətini alar. Əgər tiplərin aşikar çevrilməsi əməli tətbiq olunmasa idi onda c-dəyişəni “0”-qiymətini alardı.
Sizeof əməli. Bu əməl iki formada yazıla bilər: sizeof(tip) və sizeof(ifadə). Əməlin nəticəsi “tip”-in və ya ifadənin hesablanmasından alınan qiymətin yaddaşda tutduğu baytların sayı olur. Sizeof(ifadə) əməlində ifadənin qiymətinin tipinə görə baytların sayı hesablanır. Bu əməlin üstünlük dərəcəsi binar hesabi əməllərin, məntiq və müqayisə əməllərinin üstünlük dərəcəsindən böyükdür. Əməlin istifadə olunmasına aid misallar:
Sizeof(int) nəticə 2 bayt
Sizeof(1) nəticə 2 bayt
Sizeof(0.1) nəticə 8 bayt
Sizeof(1L) nəticə 4 bayt
Sizeof(char) nəticə 1 bayt
Sizeof (`a`) nəticə 2 bayt
Dostları ilə paylaş: |