Oshkor va oshkormas turga keltirish.
Yashirin konversiyalar.
Konversiyani kengaytirishda kompilyator biz uchun barcha
ma'lumotlarni o'zgartirishni amalga oshirdi, ya'ni konversiyalar
yopiq
(konvertatsiya
qilingan
konversiya)
edi.
Bunday
transformatsiyalar
hech
qanday
qiyinchilik
tug'dirmaydi.
Shunga qaramay, bunday o'zgarishlarning umumiy mexanikasi
haqida bir necha so'z aytishga arziydi.
Agar konvertatsiya bit chuqurligi past bo'lgan belgisiz turdan
katta bit kengligi bo'lgan belgisiz turga o'tkazilsa, u holda 0
qiymatiga ega bo'lgan qo'shimcha bitlar qo'shiladi. Bunga nol
kengaytma deyiladi.
byte a = 4;
// 0000100
ushort b = a; // 000000000000100
Belgisiz turga o'girilganda, bitning vakili nollar bilan
to'ldiriladi, agar raqam musbat bo'lsa va raqam manfiy
bo'lsa. Raqamning oxirgi raqamida bit biti mavjud - musbat
sonlar uchun 0, manfiy sonlar uchun 1.
Qo'shilgan bitlarga kengaytirilganda, belgi biti siqiladi.
Musbat sonni o'zgartirishni o'ylab ko'ring:
sbyte a = 4;
// 0000100
short b = a;
// 000000000000100
Manfiy sonni aylantirish:
sbyte a = -4;
// 1111100
short b = a;
// 111111111111100
Oshkor konversiyalar.
Aniq konversiyalar bilan biz o'zimiz konversiya operatsiyasini
(() operatsiyasini) qo'llashimiz kerak. Turni konvertatsiya
qilish operatsiyasining mohiyati shundan iboratki, qiymatdan
oldin berilgan qiymat aylantirilishi kerak bo'lgan tur qavs
ichida ko'rsatiladi:
int a = 4;
int b = 6;
byte c = (byte)(a+b);
Bit chuqurligi pastroq turdan bit chuqurligi yuqoriroq turga
konversiyani kengaytirish kompilyator tomonidan bevosita
bajariladi. Quyidagi transformatsiyalar zanjiri bo'lishi mumkin:
|