Ma’lumotlarni asosiy konversiyalari
Toraytiruvchi va kengaytiruvchi transformatsiyalar
Konversiya torayishi va kengayishi mumkin. Kengaytirilgan transformatsiyalar ob'ekt hajmini xotirada kengaytiradi. Masalan:
byte a = 4; // 0000100
ushort b = a; // 000000000000100
bayt qiymati. Bayt turi 1 bayt (8 bit) va a ning ikkilik qiymati quyidagicha ifodalanishi mumkin:
00000100
Qisqa qiymat 2 bayt (16 bit). Va b o'zgaruvchiga tayinlanganda, a o'zgaruvchining qiymati 2 baytgacha kengaytiriladi
0000000000000100
Ya'ni, kengligi 8 bit bo'lgan qiymat 16 bitgacha kengaytiriladi.
Boshqa tomondan, konversiyalarni toraytirish, qiymatni kamroq kenglik turiga toraytiradi. Maqolaning ikkinchi ro'yxatida biz konvertatsiyalarni qisqartirish bilan shug'ullandik:
ushort a = 4;
byte b = (byte) a;
Bu erda 8 bit uzunlikdagi b o'zgaruvchisiga ushort qiymati beriladi, bu 16 bit. Ya'ni, 0000000000000100 dan biz 00000100 ni olamiz. Shunday qilib, qiymat 16 bitdan (2 bayt) 8 bitgacha (1 bayt) toraytiriladi.
Aniq va yashirin konversiyalar.
Yashirin konvertatsiyalar
Konversiyalarni kengaytirilganda, kompilyator biz uchun barcha ma'lumotlarni o'zgartirishni amalga oshirdi, ya'ni konvertatsiyalar yashirin (implicit konvertatsiya) edi. Bunday o'zgarishlar hech qanday qiyinchilik tug'dirmaydi. Shunga qaramay, bunday o'zgarishlarning umumiy mexanikasi haqida bir necha so'z aytish kerak.
Kichikroq belgisiz turdan katta belgisiz turga o'tkazishda 0 qiymatiga ega bo'lgan qo'shimcha bitlar qo'shiladi. Bu nol to'ldirish yoki nol kengaytma deyiladi.
byte a = 4; // 0000100
ushort b = a; // 000000000000100
Imzolangan turga aylantirilganda, agar raqam ijobiy bo'lsa, bit ko'rinishi nol bilan to'ldiriladi, agar raqam salbiy bo'lsa. Raqamning oxirgi raqami ishora bitini o'z ichiga oladi - musbat raqamlar uchun 0 va salbiy raqamlar uchun 1. Qo'shilgan bitlarga kengaytirilganda, belgi biti siqiladi.
Ijobiy raqamni aylantirishni o'ylab ko'ring:
sbyte a = 4; // 0000100
short b = a; // 000000000000100
Aniq konvertatsiya qilish uchun biz o'zimiz konvertatsiya operatsiyasini (() operatsiyasini) qo'llashimiz kerak. Turni o'zgartirish operatsiyasining mohiyati shundan iboratki, qiymatdan oldin qavs ichida berilgan qiymat o'zgartirilishi kerak bo'lgan tur ko'rsatilgan:
int a = 4;
int b = 6;
bayt c = (bayt) (a + b);
Pastroq bit chuqurligi bo'lgan turdan yuqori bit chuqurligiga ega bo'lgan turga kengaytirish konversiyasi kompilyator tomonidan aniq amalga oshiriladi. Bular quyidagi o'zgarishlar zanjirlari bo'lishi mumkin:
Do'stlaringiz bilan baham: |