|
O’zbekiston respublikasi mudofaa vazirligi axborot-kommunikatsiya texnologiyalari va aloqa harbiy instituti axborot texnologiyalari va dasturiy injinering kafedrasi Obyektga yo`naltirilgan dasturlash fanidan
|
bet | 5/5 | Sana | 15.07.2023 | Hajmi | 148.33 Kb. | | #76765 |
Bog'liq c# mustaqil ish Mamajonov D awfdawesrbgsas vte rgt serg, xakerlar haqida, TTva TL 2-topshiriq, TOK, Документ Microsoft Word, Kompyuter tarmoqlari va ularning turlari, jismoniy tayyorgarlik, Web OOP, 7, Kompyuter-tarmoqlari.Z.Z.MiryusupovJ.X.Djumanov. (1), Topshiroq 1 Xasanov M, 3513-Article Text-6940-1-10-20220528, test tarmoq, Karimberdiyev H.F., MobaXterm 20.0.0.101root 20230426 115834Aniq va yashirin konvertatsiyalar
Yashirin konvertatsiyalar
Konversiyalarni kengaytirganda, kompilyator biz uchun barcha ma'lumotlarni o'zgartirishni amalga oshirdi, ya'ni konvertatsiyalar yashirin konvertatsiyalar edi
. Bunday o'zgarishlar hech qanday qiyinchilik tug'dirmaydi. Shunga qaramay, bunday o'zgarishlarning umumiy mexanikasi haqida bir necha so'z aytish kerak. Agar konversiya kichikroq bit chuqurligining belgisiz turidan kattaroq bit kengligining belgisiz turiga o'tkazilsa, u holda qiymatlari 0 bo'lgan qo'shimcha bitlar qo'shiladi. Bu nol to'ldirish yoki nol kengaytma deyiladi.
1
2
|
byte a = 4; // 0000100
ushort b = a; // 000000000000100
|
Agar belgilangan turga o'tkazish amalga oshirilsa, agar raqam musbat bo'lsa, bit tasviri nol bilan to'ldiriladi, agar raqam manfiy bo'lsa. Raqamning oxirgi bitida ishora biti mavjud - musbat raqamlar uchun 0 va manfiy raqamlar uchun
Qo'shilgan bitlarga kengaytirilganda, belgi biti kompilyatsiya qilinadi. Musbat raqamni aylantirishni o'ylab ko'ring:
1
2
|
sbyte a = 4; // 0000100
short b = a; // 000000000000100
|
Manfiy raqamni aylantirish:
1
2
|
sbyte a = -4; // 1111100
short b = a; // 111111111111100
|
Aniq konvertatsiyalar
Aniq konvertatsiyalar ( aniq konvertatsiya ) bilan biz o'zimiz konvertatsiya operatsiyasini (operatsiyani ()) qo'llashimiz kerak. Turni o'zgartirish operatsiyasining mohiyati shundan iboratki, qiymatdan oldin qavs ichida berilgan qiymat qaysi turdagi bo'lishi kerakligi ko'rsatilgan:
1
2
3
|
int a = 4; int b = 6;
byte c = (byte)(a+b);
|
Kompilyator kichikroq bit kengligi bo'lgan turdan kattaroq bit kengligiga ega bo'lgan turga kengaytiruvchi konvertatsiyalarni amalga oshiradi. Bu quyidagi transformatsiyalar zanjiri bo'lishi mumkin:
bayt -> short -> int -> long -> decimal int -> double
short -> float -> double char -> int
Barcha xavfsiz avtomatik konvertatsiyalarni quyidagi jadvalda tasvirlash mumkin:
Turi
|
Qaysi turlarga xavfsiz tarzda aylantirilishi mumkin
|
bayt
|
short, ushort, int, uint, long, ulong, float, double, kasr
|
sbyte
|
short, int, long, float, double, decimal
|
short
|
int, long, float, double, decimal
|
ushort
|
int, uint, long, ulong, float, double, decimal
|
int
|
long, float, double, decimal
|
uint
|
long, ulong, float, double, decimal
|
long
|
float, double, decimal
|
ulong
|
float, double, decimal
|
float
|
Double
|
char
|
ushort, int, uint, long, ulong, float, double, decimal
|
Aks holda, aniq turdagi konversiyalardan foydalanish kerak.
Shuni ham ta'kidlash kerakki, ikkilik va o'nlik kasr ma'lumotlarini saqlashi mumkin va o'nlik ikki barobardan kattaroq bit chuqurligiga ega bo'lishiga qaramay, siz baribir ikkilamchi qiymatni o'nlik kasr turiga aniq o'tkazishingiz kerak:
1
2
|
double a = 4.0;
decimal b = (decimal)a;
|
Ma'lumotlar yo'qolishi va tekshirilgan kalit so'z
Boshqa vaziyatni ko'rib chiqing, masalan, quyidagi holatda bo'ladi:
1
2
3
4
|
int a = 33; int b = 600;
byte c = (byte)(a+b);
Console.WriteLine(c); // 121
|
Natijada 121 bo'ladi, shuning uchun 633 bayt turi uchun diapazondan tashqarida va yuqori bitlar kesiladi. Natijada 121 raqami bo'ladi. Shuning uchun konvertatsiya qilishda buni hisobga olish kerak. Va bu holda, biz jami 255 dan ko'p bo'lmagan raqamni beradigan a va b raqamlarini olishimiz mumkin yoki biz bayt o'rniga boshqa ma'lumot turini tanlashimiz mumkin, masalan, int. Biroq, vaziyatlar boshqacha bo'lishi mumkin. Biz a va b qiymatlari qanday bo'lishini aniq bilmasligimiz mumkin. Va bunday vaziyatlardan qochish uchun C# da kalit so'z mavjud checked:
|
int b = 600;
byte c = checked((byte)(a + b)); Console.WriteLine(c);
}
catch (OverflowException ex)
{
Console.WriteLine(ex.Message);
}
|
Kalit so'zdan foydalanganda, checkeddastur to'lib-toshgan istisnoni chiqaradi. Shuning uchun, bu holda, try...catch konstruktsiyasi uni qayta ishlash uchun ishlatiladi. Biz ushbu konstruksiya va istisno holatlarini keyinroq batafsil ko‘rib chiqamiz, ammo hozircha biz bilishimiz kerakki, biz try blokida xatolik yuzaga kelishi mumkin bo‘lgan harakatlarni o‘z ichiga olamiz va xatoni catch blokida hal qilish mumkin.
Tiplarni oshkor bo‘lmagan arifmetik o‘zgartirish ketma-ketligi.
|
|
Bosh sahifa
Aloqalar
Bosh sahifa
O’zbekiston respublikasi mudofaa vazirligi axborot-kommunikatsiya texnologiyalari va aloqa harbiy instituti axborot texnologiyalari va dasturiy injinering kafedrasi Obyektga yo`naltirilgan dasturlash fanidan
|