JAL 2.5. Sabitler
2.5.1. Adlandırılmamış Sabitler
Adlandırılmamış bir nümerik sabit, 32-bit işaretli değer olan bir UNIVERSAL
türdedir. Bu sabit
değerler genelde önişlemlerde (preprocessing) veya değişkenlere atamalarda kullanılan değerlerdir.
Bir işlemde UNIVERSAL
türü bir sabit değer kullanıldığında, bu tür, diğer operandın türüne
çevrilir. Örneğin WORD
türünde bir değişken ya da sabit operanda 12739 UNIVERSAL
türdeki değer
atanırsa, bu UNIVERSAL
tür normalde işaretli 32 bit olmasına rağmen WORD
türüne çevrilir.
Bir istisna olarak kesirli sabit sayılar ise FLOAT
türündedir. Nümerik sabitler aşağıdaki
biçimlere sahiptir:
145 -- onluk (decimal)
20xFF -- onaltılık (hexadecimal)
30b01 -- ikilik (binary)
40q06 -- sekizlik(octal)
5"a" -- ASCII
62.56 veya 2.56e2 veya 2.56e-2 -- FLOAT
Arkadaşlar kesirli sayıların yanındaki e
simgesi İngilizce'deki exponent sözcüğünün baş
harfidir ve bir sayının üssü ya da kuvveti anlamında kullanılır. e2
ifadesi bize daha tanıdık
gelen 102 ifadesiyle aynıdır. Dolayısıyla e-2
ifadesi de 10-2 ile aynıdır.
Yukarıdaki kesirli sayılar için ifade edilen sayınının kesir noktası sola doğru kaydırıldıkça üs
sayısı değeri artarken, sağa kaydırıldıkça da üs sayısı değeri azalır. Aşağıdaki gösterim bunu daha
iyi anlamanızı sağlayacaktır.
Kesirli sabit değerin tam JAL formatı şu şekildedir:
[+|-]###.[###[e[+|-]###]
(#
) işareti sayıları temsil eder.
ASCII değerleri atanırken dikkat edilmesi gereken bir durum şudur:
1VAR BYTE ch = "123" -- Bu durumda ch değişkenine '1' ASCII karakteri yüklenir
2VAR BYTE str[] = "123" -- Bu durumda:
3 -- str[0] içine '1',
4 -- str[1] içine '2',
5 -- str[2] içine de '3' yüklenir.
Bir ASCII sabiti aşağıdaki C dili kaçış karakterleri (escaping) kurallarına izin verir:
Kaçış karakteri | Değer |
---|---|
"\ooo" | sekizlik (octal) sabit |
"\a" | zil, düdük, alarm |
"\b" | geriletme (backspace) |
"\f" | form besleme (form feed) |
"\n" | satır besleme (line feed) |
"\qooo" | sekizlik sabit |
"\r" | satır başı (carriage return) |
"\t" | yatay sekme (horizantal tab) |
"\v" | dikey sekme (vertical tab) |
"\xdd" | onaltılık (hexadecimal) sabit |
"\zbbb" | ikilik (binary) sabit |
"\" | tek bir ters bölme '' karakteri |
ASCII haricindeki sayısal sabitler ayrıca istenen miktarda alt tire ("_") içerebilirler. Bu alt
tireler derleme esnasında görmezden gelinir fakat okunaklılığı artırmak için yararlıdır.
Örneğin: 20_000_000 -- 20 milyon
veya 0b0000_1111
.
2.5.2 Adlandırılmış Sabitler
Adlandırılmış bir sabitin tanımı için tam format aşağıdaki gibidir:
1CONST [tür[*sabitifade]] tanımlayıcı [ ’[’ [ sabitifade ] ’]’ ] ’=’ { sabitifade | ’{’ sabitifade1[’,’ sabitifade2...]’}’ | ’"’...’"’}
2[ ’,’ tanımlaycı2...]
Gördüğünüz gibi sayın okuyucular oldukça kafa karıştırıcı gibi görünen bir başka gösterim biçimi daha. Eğer yazı dizisini sırayla okuduysanız buna benzer bir biçimi Değişkenler bölümünde değişken tanımlama gösterimi şeklinde görmüş olduğumuzu hatırlayacaksınız. Öncekinde olduğu gibi bunda da açıklamalarını yapacağım fakat kafa karıştırırsa fazla takılmanıza gerek yok çünkü tanımlama örneği verince format daha anlaşılır olacaktır. Önce açıklamalarını verelim:
CONST
Bir sabit tanımlaması ibaresinin başladığını belirtir.
tür[*sabitifade]
Sabitin türünü tanımlar. Hiç tür belirtilmemişse , işaretli 32-bitlik üniversal biçim haline gelir.
Örneğin:
1CONST BYTE sayi1 = 100
2CONST SWORD ilkDeger = -1000
’[’ [ sabitifade ] ’]’
Bir sabit dizisi oluşturma ibaresidir. Bir sabit dizisi en azından bir kez sabit olmayan bir
altindis ile indislenmedikçe herhangi bir yer kaplamaz. PIC denetçilerde, sabit dizileri RAM değil
PROGRAM belleğinde yer kaplarlar ve bir sabit dizisi en fazla 255 öge ile sınırlandırılmıştır.
Eğer sabitifade
'nin değeri yazılmazsa mutlaka sabitin dizi elemanları =
simgesinin karşısında
{...}
içerisinde ilklenmelidir. Bu ilkleme yapıldığında derleyici sabitteki dizi öğelerinin
sayısını {...}
içerisine yazılan değerlerden hesaplar, yoksa derleyici hata üretecektir. Örneğin:
1CONST BYTE sira[4]
2CONST WORD tablo[] = {12987, 860, 64329, 100}
'=' sabitifade
Dizi olmayan sabitler tanımlanırken sabitifade
değeri sabite atanır. Örneğin:
1CONST genislik = 345
’=’ ’{’ sabitifade1[’,’ sabitifade2...]’}’
Sabit dizileri için bu herbir dizi elemanın değerini atar. sabitifade
'lerin sayısı ile []
içerisinde tanımlanan değer aynı olmalıdır. Örneğin:
1CONST BYTE sira[4] = {1,2,3,4}
'=' ’"’...’"’
Sabit dizileri için, çift tırnak arasına yazılacak ASCII değerlerini sabit dizisinin herbir
elemanına atar. C dilinin tersine, sonlandırıcı bir NULL
eklenmez. Örneğin:
1CONST BYTE girisMesaji = "Merhaba Dunya"
2.5.3. Dize (String) Sabitler
Dize sabitler çift tırnak işaretleri içinde yazılırlar ("...") ve karakter dizilerine izin verilen herhangi bir yerde kullanılabilirler. Adlandırılmamış sabitler başlığı altında anlatılan kaçış karakterleri dize sabitlerle birlikte çift tırnak işaretleri içerisinde kullanılabilir. Örneğin:
1CONST baslik = "ILK PROGRAM"