Proqramlaşdırma


Tip Çevrilmələri və Tip Mənimsətmələr



Yüklə 1,02 Mb.
səhifə12/34
tarix11.06.2022
ölçüsü1,02 Mb.
#61216
1   ...   8   9   10   11   12   13   14   15   ...   34
c-sharp proqramlasdirma diline girish aze

Tip Çevrilmələri və Tip Mənimsətmələr

Avtomatik Tip çevrilmələri


Bir çox halarda bir tipə aid dəyişəni, başqa bir tipə aid olan dəyişənə mənimsətmə zərurəti yaranır. Məsələn aşağıdakı proqramda bir tam tipdə dəyişənə byte tipdə dəyişən mənimsədilib:
using System; class Soft
{
public static void Main()
{
int a;
byte b = 20; a = b;
}
}

Bu şəkildə mənimsətmə zamanı bir çevrilmə əməliyyatı həyata keçir. Yəni, byteint çevrilməsi baş verir. byte tipi 8 bit, int 32 bit həcmə malikdir və ikisi də tam tipdir. Yəni, int tipi onsuz da byte tipini öz içərisində saxlayır. Yəni bu kimi mənimsətmədə heç bir problem yoxdur. Bax bu kimi mənimsətmələrdə həyat keçirilən çevrilmələrə avtomatik tip çevrilmələr deyilir. Çünki, bir byte dəyişənini int dəyişəninə mənimsətmək üçün əlavə bir şey etmədik. Beləliklə, sizin də təxmin edəcəyiniz kimi, avtomatik tip çevrilməsinin həyata keçməsi üçün aşağıdakı iki şərtin ödənilməsi zəruri və kafidir:


-Hər iki tip uyumlu olmalıdır
-Hədəf tip, dönüşdürülən tipdən böyük olmalıdır
Hədəf tip dönüşdürülən tipdən böyük olduğu üçün, dönüşdürülən tipə aid dəyişənin yaddaş sahəsi artır. Buna görə də avtomatik çevrilmələrə genişlədici çevrilmə (widening conversation) deyilir. Beləliklə, byteint, int  long, uintulong, shortint kimi çevrilmələr, avtomatik həyata keçəcək. Buraya qədər hər şey aydındır elə deyilmi? Nə gözəl.

Açıq tip mənimsətmələr


İndi maraqlı bir məqama toxunaq. Avtomatik tip çevrilmələrini başa düşdünüz, çətin bir şey yoxdur. Aşağıdakı proqrama bir baxın:
using System; class Soft
{
public static void Main()
{
int a = 100; byte b = a;
}
}

Ağlınıza nə gəlir? Sizcə avtomatik çevrilmə olacaq? Bəli, düz fikirləşirsiz avtomatik tip çevrilməsi yerinə yetirilməyəcək. Çünki, avtomatik çevrilmə üçün zəruri olan ikinci şərt ödənmir. Amma belə baxanda byte tipində olan dəyişən [0 - 255] parçasında qiymət alırdı. Biz də b dəyişəninə tam tipdə də olsa, qiyməti 255-i aşmayan bir dəyişən mənimsətdik. Niyə də olmasın? Hər şeydən başqa byte 100 – ü özündə saxlayır. Amma bu tip mənimsətmələri bu formada aşkar (açıq) şəkildə yaza bilmərik. Bu yazılış bizə


―Cannot implicitly convert type 'int' to 'byte'. An explicit conversion exists‖ xətasını verəcək. Belə çevrilmələr üçün açıq (aşkar) tip mənimsətmələrindən istifadə etmək lazımdır. Bu zaman mənimsətmə operatorunun sağ tərəfində mötərizələr içərisində hədəf tipin adı qeyd olunmalıdır. Yuxarıdakı proqamı aşağıdakı kimi yazaq:
using System; class Soft
{
public static void Main()
{
int a = 100;
byte b = (byte) a;
}
}

Beləiklə, xəta aradan qalxacaq. Sizin də təxmin etdiyiniz kimi, açıq tip mənimsətməni həyata keçirmək üçün aşağıdakı şərtin ödənməsi zəruri və kafidir:


-Hədəf tip, çevrilən tiplə uyğun olmalıdır
Odur ki, string  int kimi bir çevrilməni, açıq tip mənimsətmə ilə edə bilmərik. Buraya qədər hər çey çox yaxşı, bir də aşağıdakı proqrama baxaq:
using System; class Soft
{
public static void Main()
{
int a = 300;
byte b = (byte) a;
Console.WriteLine(b);
}
}

Aha! a dəyişənin qiymətinə fikir verin, 300 bayt tipinin qiymətlər diapazonunu aşır. Bu


proqramı icra etsək, ekrana 44 çıxacaq. Bəs niyə 300 yox, 44? Gəlin araşdıraq:
Byte tipi 8 bit yer tutduğu üçün, 8 mərtəbəli bit sistemində (ikilik say sistemində) ifadə olunan ən böyük ədəd, aydındır ki, bütün bitlərin ―1‖ olduğu haldır. Yəni
11111111 = 255
İndi, 300 ədədinin ikilik sistemdə təsvir edək: 100101100
İndi bu ikilik təsvir ilə 255- in iliklik təsvirini məntiqi VƏ (konyunksiya) əməliyyatından
keçirək:
011111111

& 100101100
000101100 = 44
Maraqlıdır elə deyil mi? Məncə də çox maraqlıdır. Qeyd edim ki, mən sizin ikilik say sistemi ilə bağlı məlumatınızın olduğunu güman edirəm.
Qayıdaq əsas mövzuya, deməli 300 əvəzinə 44 çıxdı ekrana. Yəni, məlumat düzgün təsvir olunmadı – məlumat itkisi oldu. Buna görə də açıq tip mənimsətməni həyata keçirərkən, diqqət etmək lazımdır ki, hədəf tip mənimsədilən qiyməti özündə saxlaya bilsin. Çünki, əks hada məlmat itkisi (data lost) olacaq və proqramınız istədiyiniz kimi nəticə verməyə bilər.

Yüklə 1,02 Mb.

Dostları ilə paylaş:
1   ...   8   9   10   11   12   13   14   15   ...   34




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©azkurs.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin