JAL 3.1: İşleçler (Operators)
İşleçler, kod yazarken aritmetik, mantıksal, karşılaştırma ve dile özel bazı işlevleri gerçekleştirmeye yararlar. JAL 2. versiyonu itibariyle aşağıdaki işleçleri desteklemektedir.
Tablo: JALv2 İşleçleri
İşleç (Operator) | İşlem (Operation) | Sonuç |
COUNT | Bir dizideki öğe sayısını döndürür. | UNIVERSAL |
WHEREIS | Bir tanımlayıcının adres konumunu döndürür. | UNIVERSAL6 |
DEFINED | Bir tanımlayıcının olup olmadığını denetler. | BIT |
’(’ ifade ’)’ | Gruplandırma. | ifade değerlendirmesinin sonucu |
’-’3 | Birli - (eksileştirme) | İşlecin aynısı |
’+’3 | Birli + | İşlecin aynısı |
’!’3 | 1'in tümleyeni | İşlecin aynısı |
’!!’3 | Mantıksal. İzleyen değer 0 ise, sonuç da 0 olur, aksi takdirde sonuç 1 olur. | BIT |
’*’3,5 | Çarpma | Promosyon2 |
’/’3,5 | Bölme | Promosyon2 |
’%’5 | Modülüs bölme (kalan bulma) | Promosyon2 |
’+’3 | Toplama | Promosyon2 |
’-’3 | Çıkarma | Promosyon2 |
’<<’ | Sola kaydırma | Promosyon2 |
’>>’1 | Sağa kaydırma | Promosyon2 |
’<’3 | Kesinlikle küçük | BIT |
’<=’3 | Küçük veya eşit | BIT |
’==’4 | Eşit, aynı | BIT |
’!=’4 | Eşit değil | BIT |
’>=’3 | Büyük veya eşit | BIT |
’>’3 | Kesinlikle büyük | BIT |
’&’ | İkilik VE (binary AND) | Promosyon2 |
’|’ | İkilik VEYA (binary OR) | Promosyon2 |
’^’ | İkilik özel VEYA (binary EX-OR) | Promosyon2 |
1sağa kaydırma: Soldaki işlenen(operand) işaretliyse, kaydırma aritmetik (işaret korunur), işaretsiz ise basit ikilik kaydırmadır.
2promosyon: Promosyon kuralları biraz karmaşıktır, durumlar şu şekildedir:
İşlenenlerden biri FLOAT ise, sonuç da FLOAT olur.
İşlenenlerden biri UNIVERSAL ve diğerleri değilse, sonuç UNIVERSAL-olmayan işlenen ile aynı türdedir.
Heriki işlenen de aynı işaretliliğe ve genişliğe sahipse, sonuç işlenenlerin türünde olacaktır.
Heriki işlenen de aynı genişliğe sahip ancak biri işaretsizse, sonuç da işaretsizdir.
İşlenenin biri diğerinden daha genişse, diğeri geniş olan türe terfi ettirilecektir.
İşlenenlerden biri FLOAT ise, sonuç da FLOAT olur.
İşlenenlerden biri UNIVERSAL ve diğerleri değilse, sonuç UNIVERSAL-olmayan işlenen ile aynı türdedir.
Heriki işlenen de aynı işaretliliğe ve genişliğe sahipse, sonuç işlenenlerin türünde olacaktır.
Heriki işlenen de aynı genişliğe sahip ancak biri işaretsizse, sonuç da işaretsizdir.
İşlenenin biri diğerinden daha genişse, diğeri geniş olan türe terfi ettirilecektir.
3Bu işleçler FLOAT türlere izin verir.
4Kayan noktalı (floating point) sayılar, özensiz saklanma biçimlerinden dolayı asla eşitlik için karşılaştırılmamalıdır. Böyle bir girişimde bulunmak derleyicinin bir uyarı göstermesine neden olacaktır. Aynı matematiksel sonucu vermesi gereken iki farklı işlem eşitsizliği karşılaştırabilir. İki kayan noktalı sayıyı, diyelim ki A ve B için, karşılaştırmanın doğru yolu şöyledir, 'abs((A - B) / B) < 1e-6' (kayan noktalı değerler 6-9 hanelik nominal hassasiyete sahiptir).
5Unutulmamalıdır ki, tamsayı türleri arasında bile olsa, çarpma ve bölme kod ve veri boyutu olarak çok maliyetli işlemlerdir.
6WHEREIS'in sonucu kullanılan tanımlayıcıya bağlı olarak değişir:
> Bir prosedür veya işlev giriş noktasının KOD adresini döndürecektir.
> Bir assembly etiketi, etiketin KOD adresini döndürecektir.
> Bir değişken ise değişkenin VERİ adresini döndürecektir.
> Bir sabit ise hata üretilir.
> Bir sabit dizisinde ne döndürüleceği işlemci ailesine bağlıdır:
- İşlemci ailesi 16-bit ise: Verinin KOD adresi döndürülür.
- İşlemci ailesi 16-bit-olmayan ise: Arama tablosunun (lookup function) giriş noktasının KOD adresi döndürülür.
> Bir prosedür veya işlev giriş noktasının KOD adresini döndürecektir.
> Bir assembly etiketi, etiketin KOD adresini döndürecektir.
> Bir değişken ise değişkenin VERİ adresini döndürecektir.
> Bir sabit ise hata üretilir.
> Bir sabit dizisinde ne döndürüleceği işlemci ailesine bağlıdır:
- İşlemci ailesi 16-bit ise: Verinin KOD adresi döndürülür.
- İşlemci ailesi 16-bit-olmayan ise: Arama tablosunun (lookup function) giriş noktasının KOD adresi döndürülür.
Konular