Teknomerkez
TR EN ES
Konular

JAL 3.2: Tür Dönüştürme (Casting)

Yazar: İsmail Sahillioğlu
Tarih: 23.01.2021
Türkçe

Bir değerin bellekte temsil edilecek türünü değiştirmeye tür değiştirme denir. Temsil edilecek dememden kasıt şudur ki; mikrodenetleyicilerde veriler yalnızca ikilik (binary) olarak işlenebildiğinden, yazılım kodlarken kullanılan sabit ya da değişken değerlerin ikilik formatta nasıl organize edileceğinin belirlenmesi gerekir. Bilindiği üzere 8-bitlik bir mikrodenetleyici tek bir yazmacında en fazla 28 (256) sayısına denk gelecek kadar ikilik veri tutabilir. Bu değeri aşan değerlerin birden çok yazmaçlara dağıtılıp organize edilmesi gerekir. İşte bu değeri ikilik formatta organize etme işini JAL derleyicisi bizim yerimize yaptığından, sabit değerlerde çok olmasa da, özellikle değişken değerlerde kodumuzda ne tür değişkenler kullanacağımızı tanımlayıp JAL derleyicisine değerleri nasıl organize etmesi gerektiğini bildirmiş oluruz.

Ancak bazı uygulamalarda öyle durumlarla karşılaşırız ki, farklı türlerdeki değişken veya sabitleri birbirine atarken veya tek bir hesaplama içerisinde kullanırken birbirine dönüştürmek zorunda kalabiliriz. Örneğin daha büyük türdeki bir değeri daha küçük türdeki bir değere, diyelim ki WORD türündeki değeri BYTE türündeki değere atamamız gerekebilir. Bu durumda derleyici bir uyarı verecektir. Fakat açıkça tür dönüşümü yapmak bu uyarıyı ortadan kaldıracaktır.

VAR WORD buyuk_deger
VAR BYTE kucuk_deger

; aşağıdaki atama:
; warning: assignment to smaller type; truncation possible
; Türkçesi uyarı: daha küçük bir türe atama; değer kesme olasılığı
; uyarısı verecektir. Bu uyarı, büyük değerin küçük değere atanması durumunda değerin 28 'i
; aşması durumunda değerde tıraşlama yapılacağını vurgular. Bu da artık değerin aynı değer olmayacağı
; anlamına gelir.
;
kucuk_deger = buyuk_deger

; Fakat ne yaptığınızdan eminseniz aşağıdaki gibi bir atama herhangi bir uyarı üretmeyecektir
;
kucuk_deger = BYTE(buyuk_deger)

İlk durumda derleyici, sizin farkında olmadan böyle bir işlem yapmış olabileceğinizi ve bunun beklenmeyen sorunlar oluşturabileceğini size bildirmek ister.
İkincisinde ise siz zaten derleyiciye bu türlerin farklı olmasına rağmen ne yaptığınızdan emin olduğunuzu belirtmişsinizdir ve bu durumda derleyici herhangi bir uyarı vermeycektir.

Tür dönüşümünün gerekli olduğu başka bir durum, bir işlem sırasında doğru ilerlemeyi garanti etmektir. Aşağıdaki örneği ele alalım:

VAR WORD a
VAR BYTE b

; Aşağıdaki işlemin yapılması bekleneni yapma olasılığı düşük
a = b * b

; Ama bu doğru sonucu üretecektir
a = WORD(b) * WORD(b)

Unutulmamalıdır ki bir işleç yalnızca kendi iki işlenenini görür, başka içeriği yoktur. Diyelim ki b değeri 255 olsun. 255 * 255 = 65025 yapar, bu sayının ikilik değeri şöyledir: 11111110 00000001. Yukarıdaki ilk durumda a, sonucun düşük sekiz bitinde kalan değer : 00000001 ile atanacaktır. Çünkü derleyici işlenenleri byte olarak yorumlar. İkinci durumda ise b değişkeni WORD türüne dönüştürüldüğünden a değişkenine atanan değer asıl olması beklenen değer olan 65025 olacaktır.


Yorumlarınız

Hiç yorum yapılmamış.

Bir yorum ekleyin

İsim:
E-posta:
Yorumunuz:
Güvenlik Kodu:
 
Tüm alanları doldurmak zorunludur. Yorumunuz kontrol edilince yayınlanacaktır. E-posta adresi yayınlanmaz.
İzin verilen html etiketler (tag): <p><div><b><strong><i><u><del><hr><sup><sub><br>