JAL 2.1: Veri Türleri
JAL v2 derleyicisi yalnızca aşağıdaki türleri tanır.
Tür | Açıklama | Aralık |
BIT1 | 1 bit boolean değer | 0.....1 |
SBIT1 | 1 bit işaretli değer | -1.....0 |
BYTE1 | 8 bit işaretsiz değer | 0.....255 |
SBYTE1 | 8 bit işaretli değer | -128.....127 |
WORD | 16 bit işaretsiz değer | 0.....65.535 |
SWORD | 16 bit işaretli değer | -32.768.....32.767 |
DWORD | 32 bit işaretsiz değer | 0.....4.294.967.295 |
SDWORD | 32 bit işaretli değer | -2.147.483.648 ..... 2.147.483.647 |
FLOAT1 | Kesirli (kayan noktalı) değer | +/- 10^-44.....10^38 |
1Temel türler
En büyük türler, WORD, SWORD, DWORD, SDWORD genişlik belirticisini kullanarak basitçe temel türlerden türetilmiştir. Örneğin WORD, BYTE*2’ye eşittir, sonuncusu yani BYTE*2, biçimlendirici ile diğerinin alternatifi olarak kullanılabilir. İzleyen tanımlama örneklerini inceleyin.
VAR WORD DEGISKEN_A --1 word = 2 byte
VAR BYTE*2 DEGISKEN_B --2 byte = 1 word
Verilen örneklerde görüldüğü gibi her iki tanımlama da aslında bellekte aynı yeri kaplar, yani 2 byte. Fakat bize kolaylık olması açısından derleyicinin içinde türetilmiş daha büyük türler kullanılabilir. Bu kod okunaklılığını artıracaktır.
Kesirli sayı (floating point) aritmetiği çoğu 8-bit PIC mikrodenetleyiciler için kod ve veri belleği açısından yüksek bedellidir ve önlenmesi daha iyidir. Çünkü 8-bit PIC mimarisi aritmetik işlemler bakımından zayıf bir donanım yapısına sahiptir. PIC16 modellerinde çarpım ve bölme yapan donanımlar bulunmamakta, PIC18 modellerinde ise yalnızca 8 bit x 8 bit çarpma yapabilen bir donanım bulunur. Bu donanım yetersizliği kesirli işlemlerin 8 bit PIC modellerinde işlenmesini güçleştirir. JAL FLOAT türü IEEE (The Institue of Electrical and Electronics Engineers - Elektrik ve Elektronik Mühendisleri Enstitüsü) standardının 754. maddesi üzerine temellendirilmiştir. Bununla beraber ne istisnalar doğurur, ne de taşma ya da özel sayıları (+/-Sonsuzluk, +/-NaN, -0, vb) işler. Bir kesirli sayı yani FLOAT değeri 4 BYTE ile temsil edilir.
BIT türüyle ilgili bilinmesi gereken bir nokta var. Özgün JAL dilinde, BIT türü daha çok bir boolean gibi davranırdı; 0 atanırsa , saklanan değer sıfır olur, herhangi bir sıfır olmayan değer atanırsa saklanan değer bir olurdu. Bu yöntem JALv2’de hala kullanılır. Nitekim JALv2 ayrıca BIT türlerini daha çok C dilindeki bit alanları gibi anlar. Eğer BIT bir yerine BIT*1 biçimi kullanılırsa, atanan bit değeri uygun bir biçimde maskelenir. Diğer bir deyişle BIT*1 y = z ataması; dahili olarak BIT*1 y = (z & 0x0001) biçimine çevrilir. Dolayısıyla maskeleme işlemi derleyici tarafından gerçekleştirilir.
Öntanımlı daha büyük türler standart genişlikler kullanmasına rağmen (2 ve 4 bayt), dil tarafından dayatılan böyle bir zorunluluk yoktur. Üç byte’lık bir değere ihtiyaç varsa, BYTE*3 tanımlama biçimi kullanılabilir. Tek sınırlayıcı etmen istenen değişken uzunluğunun bir veri bankınıni içine sığmasıdır. BIT ve BYTE farklı yapılardır, bu yüzden BIT*24 değeri tanımlaması, BYTE*3 değeri tanımlamasıyla aynı olmaz!