Aniq va yashirin konversiyalar.
Yashirin konversiyalar
Konversiyani kengaytirishda kompilyator biz uchun barcha ma'lumotlarni o'zgartirishni amalga oshirdi, ya'ni konversiyalar yopiq edi (implicit conversion). Bunday transformatsiyalar hech qanday qiyinchilik tug'dirmaydi. Shunga qaramay, bunday o'zgarishlarning umumiy mexanikasi haqida bir necha so'z aytish mumkin. Kichik qiymatdan turdan katta qiymat turga o'girilganda, qiymati 0 ga teng bo'lgan qo'shimcha bitlar qo'shiladi, bu nol to'ldirish yoki zero extension deb nomlanadi.
bayt a = 4; // 0000100
ushort b = a; // 000000000000100
Belgilangan turga o'girilganda, bitning vakili raqam ijobiy bo'lsa, nollar bilan to'ldiriladi, agar raqam salbiy bo'lsa. Raqamning oxirgi raqamida bit belgisi mavjud - musbat sonlar uchun 0, salbiy sonlar uchun 1. Qo'shilgan bitlarga kengaytirilganda, belgi biti siqiladi. Musbat raqamni o'zgartirishni o'ylab ko'ring:
sbyte a = 4; // 0000100
short b = a; // 000000000000100
Manfiy raqamni aylantirish:
sbayt a = -4; // 1111100
short b = a; // 111111111111100
Aniq konversiyalar.
Aniq konversiyalar bilan (explicit conversion) biz o'zimiz konversion operatsiyani (operatsiya()) 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);
Katta bit bilan turi uchun kichik bit bilan turi dan konvertatsiya kengaytirish tuzuvchi bevosita amalga oshiradi. Bu quyidagi o'zgarish zanjirlari bo'lishi mumkin:
byte -> short -> int -> long -> decimal
int -> double
short -> float -> double
char -> int
Barcha xavfsiz akslantirish avtomatik akslantirish quyidagi jadval bilan ta'riflash mumkin:
Do'stlaringiz bilan baham: |