O’zbekiston respublikasi mudofaa vazirligi axborot-kommunikatsiya texnologiyalari va aloqa harbiy instituti axborot texnologiyalari va dasturiy injinering kafedrasi Obyektga yo`naltirilgan dasturlash fanidan




Download 148.33 Kb.
bet5/5
Sana15.07.2023
Hajmi148.33 Kb.
#76765
1   2   3   4   5
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 115834
Aniq 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

  1. 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:






try
{
int a = 33;





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.
Download 148.33 Kb.
1   2   3   4   5




Download 148.33 Kb.

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

Download 148.33 Kb.