double: suzuvchi nuqta raqamini ± 5,0 * 10
-324
dan ± 1,7 * 10
308
gacha saqlaydi
va 8 baytni egallaydi. System.Double tizim turi bilan ifodalanadi.
decimal: o‘nli kasr sonini saqlaydi. Agar kasrsiz ishlatilsa, u ± 1.0 * 10
-28
dan ±
7.9228 * 10
28
gacha bo'lgan qiymatga ega, 28 ta o'nli kasrni saqlashi mumkin va
16 baytni oladi. System.Decimal tizim turi bilan ifodalanadi.
char: Bitta Unicode belgisini saqlaydi va 2 baytni oladi. System.Char tizim turi
bilan ifodalanadi. Belgilar literallari ushbu turga mos keladi:
char a = 'A';
char b = '\x5A';
char c = '\u0420';
string: Unicode belgilar to'plamini saqlaydi. System.String tizim turi bilan
ifodalanadi. Belgilar literallari ushbu turga mos keladi.
string salom = "Hello";
string dunyo = "world";
ob’ekt: har qanday ma'lumot turidagi qiymatni saqlashi mumkin va 32 bitli
platformada 4 bayt va 64 bitli platformada 8 bayt. Boshqa barcha .NET turlari va
sinflari uchun asosiy tur bo'lgan System.Object tizim turi bilan ifodalanadi.
object a = 22;
object b = 3.14;
object c = "hello code";
Turni boshqa turga keltirish qoidalari.
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;
Amaliyot natijasi juda to'g'ri, kutilganidek, 74 raqami.
Keling, ikkita baytli ob'ektga qo'shimcha kiritishga harakat
qilaylik:
byte a = 4;
byte b = a + 70; // xato
Bu
yerda
faqat
qo'shilish
natijasini
oladigan
o'zgaruvchining turi o'zgargan - int dan baytgacha. Ammo,
biz dasturni kompilyatsiya qilmoqchi bo'lganimizda,
kompilyatsiya bosqichida xatolikka yo'l qo'yamiz. Agar
biz Visual Studio-da ishlayotgan bo'lsak, bu yerda xato
borligini ko'rsatib, qizil chiziq bilan chiziqning pastki
chizig'ini chizadi.
Amaliyot davomida biz ma'lum bir turdagi saqlashi
mumkin bo'lgan qiymatlar oralig'ini hisobga olishimiz
kerak. Ammo bu holda biz olishni kutayotgan 74 soni bayt
turidagi qiymatlar oralig'iga juda mos keladi, shunga
qaramay, biz xatoga yo'l qo'yamiz.
Haqiqat shundaki, 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 biz ushbu ob'ektni
o'zgaruvchiga berishga harakat qilamiz, u bayt turi va
xotirada 1 baytni egallaydi.
byte a = 4;
byte b = (byte)(a + 70);
Turni
konvertatsiya
qilish
operatsiyasi
qavs
ichida
qiymatning konvertatsiya qilinadigan turini ko'rsatishni o'z
ichiga oladi.
Toraygan
va
kengaygan
transformatsiyalar.
Konversiyalar torayishi va kengayishi mumkin.
Kengaytiruvchi transformatsiyalar xotiradagi ob'ekt
hajmini kengaytiradi. Masalan:
byte a = 4;
// 0000100
ushort b = a; // 000000000000100
Bunday holda ushort tipidagi o'zgaruvchiga bayt
tipidagi qiymat beriladi. Bayt turi 1 bayt (8 bit)
bo'lib, a ning ikkilik 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.
Boshqa tomondan, tor konversiyalar qiymatni kamroq
kenglik turiga qisqartiradi.
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) torayadi.
|