2. Bazaviy tiplar


turni boshqa turga keltirish


Download 21.92 Kb.
bet3/4
Sana04.02.2023
Hajmi21.92 Kb.
#1159366
1   2   3   4
4. turni boshqa turga keltirish
Ma'lumot turlarini ko'rib chiqishda u yoki bu turdagi qanday qiymatlarga ega bo'lishi va qancha bayt xotirani egallashi mumkinligi ko'rsatildi. Oxirgi mavzuda arifmetik amallar muhokama qilindi. Endi har xil turdagi ma'lumotlarga qo'shimcha operatsiyani qo'llaymiz:
byte a = 4;
int b = a + 70;
amallarni bajarish natijasi kutilganidek juda to'g'ri 74 soniga teng.

Ushbu amallarni bayt turidagi ikkita ob'ektni qo’shishga foydalabnamiz:


byte a = 4;
byte b = a + 70; // xatolik
Bu erda faqat qo'shilish natijasini oladigan o'zgaruvchining turi int dan baytga o'zgargan. Ammo, biz dasturni kompilyatsiya qilmoqchi bo'lganimizda, kompilyatsiya bosqichida xatolik sodir bo’ladi. Agar Visual Studio-da ishlayotgan bo'lsak, unda xato borligini ko'rsatib, qizil chiziq bilan to’qinli chiziq ostiga chiziladi.
Amalni bajarish davomida ma'lum bir turdagi saqlashi mumkin bo'lgan qiymatlar oralig'ini hisobga olishi kerak. Ammo bu holda, kutayotgan 74 soni bayt turidagi qiymatlar oralig'iga mos keladi, ammo xatolik sodir bo’ldi.
Buning sababi, agar operatsiya bit kengligi int dan kichik yoki unga teng bo'lgan (ya'ni bayt, qisqa, int turlari) ma'lumotlar sonini o'z ichiga oladigan bo'lsa, qo'shish (va ayirish) operatsiyasi int qiymatini qaytaradi. Shuning uchun a + 70 operatsiyasining natijasi xotirada 4 bayt uzunlikdagi ob'ekt bo'ladi. Keyin ushbu ob'ektni o'zgaruvchiga berishga harakat qilindi, lekin bayt turi xotirada 1 baytni egallaydi. Bu vaziyatdan chiqish uchun turni boshqa turga keltirish (konvertatsiya) operatsiyasini qo'llashin kerak:
byte a = 4;
byte b = (byte)(a + 70);
Turni konvertatsiya qilish operatsiyasi qiymatni aylantirish kerak bo'lgan turdagi qavs ichida ko'rsatishni nazarda tutadi.
Qisqattirlgan va uzaytirilgan konvertatsiyalar
Konversiyalar qisqattirlishi va uzaytirilishi mumkin. Uzaytirilgan konvertatsiyalar xotiradagi ob'ekt hajmini ortishga olib keladi. Masalan:
byte a = 4; // 0000100
ushort b = a; // 000000000000100
Bu holda ushort tipidagi o'zgaruvchiga bayt tipidagi qiymat beriladi. Bayt turi 1 baytni (8 bit) egallaydi va a o'zgaruvchining ikkilikdagi qiymati quyidagicha ifodalanishi mumkin:
00000100
ushort qiymati 2 bayt (16 bit) va o'zgaruvchiga tayinlashda a o'zgaruvchisi qiymati 2 baytgacha kengaytiriladi.
0000000000000100
Ya'ni, kengligi 8 bit bo'lgan qiymat 16 bitgacha kengaytiriladi.
Qisqa konversiyalar, aksincha, qiymatni kamroq kenglik turiga qisqartiradi. Quyida konversiyani qisqartirish ko’rsatilgan:
ushort a = 4;
byte b = (byte) a;
Bu erda 8 bit uzunlikdagi b o'zgaruvchiga 16 bit bo'lgan ushort qiymati beriladi. Ya'ni, 0000000000000100 dan biz 00000100 ni olamiz. Shunday qilib, qiymat 16 bitdan (2 bayt) 8 bitgacha (1 bayt) qisqaradi.



Download 21.92 Kb.

Do'stlaringiz bilan baham:
1   2   3   4




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling