Tiplarni o‘zgartirish
Amaliyotda ko‘p hollarda tiplarni o‘zgartirishga to‘g‘ri keladi. S# da tiplarni
o‘zgartirishning 2 xil ko‘rinishi bo‘lib oshkormas va oshkor.
Oshkormas tip almashtirish qiymat o‘zlashtirilayotganda avtomatik amalga
oshiriladi. Masalan, int yoki short tipiga mansub qiymat long tipiga mansub
o‘zgaruvchiga berilganda. Quyidagi misolda int qiymatlar yig‘indici long tipiga
o‘zlashtirilyapti:
Dasturlash tillari va axborot-kommunikatsiya texnologiyalari 1-semestr
60
int
a=34;
int
b=45;
long
c =a + b;
Console
.WriteLine(
"c="
+ c);
long tipi int tipiga nisbatan baytlar soni ko‘p bo‘lganligi uchun bu yerda xatolik
bo‘lmaydi. Quyidagi jadvalda C# tilidagi oshkormas almashtirishlar keltirilgan:
sbyte
short, int, long, float, double, decimal
byte
short, ushort, int, uint, long, ulong, 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,
ulong
float, double, decimal
float
Double
char
ushort, int, uint, long, ulong, float, double, decimal
Oshkor tip almashtirish
Ayrim hollarda tiplarni almashtirish oshkor tarzda amalga oshiriladi. Quyidagi
oshkormas tip almashtirish hollarda xatolik yuzaga keladi:
int ni short ga – ma’lumot yo‘qotilishi mumkin
int ni uint ga – ma’lumot yo‘qotilishi mumkin
uint ni int ga – ma’lumot yo‘qotilishi mumkin
float ni int ga – ma’lumot yo‘qotilishi mumkin
ixtiyoriy sonli tipni char tipiga - ma’lumot yo‘qotilishi mumkin
decimal ni boshqa ixtiyoriy sonli tipga – o‘nli tip boshqacha tashkil qilinganligi
bois, ma’lumot yo‘qotilishi mumkin.
Bunday hollar uchun oshkor tip almashtirish qo‘llaniladi. Tipik sintaksisi
quyidagicha:
qabul_qiluvchi =(qabul_qiluvchi_tipi) ifoda;
long
a;
int
b;
Dasturlash tillari va axborot-kommunikatsiya texnologiyalari 1-semestr
61
a = 2300;
b = (
int
)a;
Biror tip boshqasiga o‘tkazilganda, kompilyator ushbu amalni bajarishi lozim.
long
a;
int
b;
a = 2300000000;
b = (
int
)a;
Console
.WriteLine(b);
Mana shu dastur qismi bajarilganda ekranda -1994967296 soni hosil bo‘ladi.
Demak bu yerdan ko‘rinib turibdiki tiplarni almashtirganda shu tip diapozoniga
tushadigan qiymatlarni o‘tkazish zarur aks holda xatolik yuz beradi. C# tilida checked
operatori mavjud bo‘lib, stekning holatini aniqlash mumkin ya’ni xatolik yuz bergani
to‘g‘risida xabar beradi.
long
a;
int
b;
a = 2300000;
b =
checked
((
int
)a);
Tiplarni almashtirish xatoliklarni hosil qilishi mumkinligini inobatga olib,
xatoliklarni qayta ishlovchi try...catch konstruksiyasidan foydalanish ham mumkin.
Masalan:
long
a;
int
b;
a = 2300000000;
try
{
b =
checked
((
int
)a);
Console
.WriteLine(b);
}
catch
{
Console
.WriteLine(
"Tiplarni almashtirganda xatolik yuz
berdi"
);
}
Quyidagi misolda suzuvchi nuqtali tipni butun son tipiga almashtirilyapti:
double
d=10.23;
int
i;
i = (
int
)(d + 2.4);
Dasturlash tillari va axborot-kommunikatsiya texnologiyalari 1-semestr
62
Keyingi misolda ishorasiz butun son char tipiga o‘tkaziladi:
ushort
c = 38;
char
sym = (
char
)c;
Console
.WriteLine(sym);
Ekranga ASCII kodining 38-kodli & simvoli chiqariladi. Quyidagi misolda
decimal qiymat char ga o‘tkazilgan:
decimal
x = 105m;
char
sim = (
char
) x;
Console
.WriteLine(sim);
// i harfi hosil bo‘ladi
char
s =
'i'
;
decimal
d = (
decimal
) s;
Console
.WriteLine(d);
// 105 qiymati qaytariladi
Agar hosil qilingan natija, yangi tipga o‘tkazilmasa, tip almashtirish baribir
amalga oshiriladi. Ammo natija kutilayotgan qiymatni qaytarmaydi. Masalan,
int
i = -1;
char
symbol = (
char
) i;
Ushbu tip almashtirish amalga oshirilmasligi lozim. Ammo natija sifatida ?
simvoli qaytariladi.
Agar sonli tipli qiymatni harfiy tipga o‘tkazish lozim bo‘lsa, .NET bibliotekasi
klasslari metodlaridan foydalanish lozim. object klassi ToString() metodiga ega
bo‘lib, ushbu amalni bajarish mumkin:
int
i = 10;
string
s = i.ToString();
Shuningdek, harfiy tipli qiymatni sonli tipga o‘tkazish uchun Parse()
metodidan foydalaniladi:
string
s = 100;
int
i = int.Parse(s);
Console.WriteLine(
i+50);
|