Amiga Dünyası sayı 8, sayfa 41

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 41

Parantez kullanılmadığında önce *, / ve % işlemleri, daha sonra +, - işlemleri yapılır. Bütün bu aritmetik işlemler, soldan sağa doğru uygulanır.

KARŞILAŞTIRMA OPERATÖRLERİ:

>, >=, <, <= işaretlerinden oluşur ve bunların hepsi aynı işlem önceliğine sahiptir. Bunların işlem öncelik sırasının bir altında ise eşitlik operatörleri olan;

== ve != operatörleri bulunmaktadır. Karşılaştırma operatörleri işlem önceliği bakımından aritmetik operatörlerin altında bulunur. Dolayısıyla; i<lim-1 demek, tahmin edildiği gibi i<(lim-1) anlamına gelir.

C dilindeki mantıksal operatörler olan && (İng. AND, Tk. VE) ve || (İng. OR, Tk. VEYA) operatörleri, belki de en ilginç operatörlerdir. && ve || operatörleri ile birbirine bağlanan ifadeler, soldan sağa doğru değerlendirilir ve sonucun doğru ya da yanlış olduğu bilinir bilinmez işlem sona erer. Örneğin:

for (i=0;i=lim-l&&(c=getchaı())!='\n'&&c!=EOF;++i)

s[i]=c:

satırında yeni bir karakter okumadan önce s dizisinde yer olup olmadığının kontrol edilmesi gerekir. Çünkü önce karakter alınıp daha sonra yer kalıp kalmadığı kontrol edilirse, yer kalmadığı halde boşuna karakter alınmış olur. Bu da, fazla işlem yapılmasına sebep olur. Ayrıca, karakterin EOF'a eşit olup olmadığı karakter alındıktan sonra yapılmalıdır. Sonuç olarak; "VE" (&&) ve "VEYA" (||) operatörleri kullanılırken ifadelerin yazılış sırası program hızını ve çalışmasını etkileyebilir.

Bu operatörlerden başka; 0'dan farklı herhangi bir sayıyı 0'a, 0'ı ise 1'e çeviren bir operatör olan ! (İng. Unary negation) operatörü de bulunmaktadır.

Ünlem operatörü, daha çok aşağıdaki gibi kullanılır:

if(değişken==0);

ifadesi genellikle, if(!değişken);

biçiminde yazılır.

TÜR DEĞİŞTİRMELER:

Eğer ifadelerde birbirinden farklı türlerde değişkenler bir arada kullanılıyorsa, değişkenlerin hepsi ortak bir veri türüne çevrilir. Çevrilme işlemini belirleyen birkaç kural vardır:

Birinci olarak char (Tk. karakter) ve int'ler (Tk. tamsayı), ifadelerde serbestçe karıştırılabilirler:

Bütün karakterler aritmetik işlemlerde tamsayılara çevrilir. Bu durum, karakterler ile ilgili işlemlerin esnek olarak yapılabilmesini sağlamaktadır. Örneğin; karakter olarak girilen bir sayıyı, sayı eşdeğerine çeviren bir fonksiyon yazmak istersek:

atoi(s) /*s'i tamsayıya çevirme*/ char s[j;

{

int i,n;

n=0; for(i=0;s[i]>='0,&&s[i]<='9';++i)

n=10*n+s[i]-'0'; return(n);

Bilindiği gibi s[i]-'0' ifadesi, bize s[i]'de depolanmış karakterin nümerik değerini verir. Çünkü bütün rakamlar karakter setinde (ASCII) birbirlerini izleyen sırayla yer alır.

Bir diğer örnek olarak, giriş karakterlerinden büyük harf olanları küçük harfe dönüştüren lower fonksiyonu verilebilir. lower fonksiyonu, eğer karakter büyük harfse o karakterin küçük harfini; karakter setinde büyük harfler dışında kalan bir karakterse, karakterin kendisini çağıran fonksiyona yollamalıdır. O zaman:

lower(c) /*c karakteri küçük harfe dönüşür*/ int c;

{

if(c>='A,&&c<='Z')

return(c+'a'-'A'); else

return(c); }

Otomatik tür değişmelerinin başka bir yararı da karşılaştırma ve mantıksal operatörlerin kullanılmasında görülür. i>j veya && ve || operatörleri ile birbirine bağlanan ifadeler doğruysa 1, yanlışsa 0 değerini alırlar. Yani:

i=(c>='0'&&c<='9');

ifadesi sonucunda, i değişkeninin değeri ya 1 ya da 0 olabilir. Ayrıca >=, &&, <= operatörlerinin önceliği ='den daha fazla olduğu için parantezlerin yazılmasına da gerek yoktur, if, while gibi komutların test bölümlerinde doğru, 0'dan farklı herhangi bir sayı anlamına gelmektedir.

Aritmetik işlemlerdeki tür değiştirmeler tahmin edilebileceği gibidir. Genel olarak bir aritmetik operatör (+, -, * gibi) iki farklı tür değişken arasında uygulanıyorsa; değişkenlerden düşük türde (bellekte az yer kaplayan) olanı, büyük türde (bellekte daha fazla yer kaplayan) olanına çevrilir ve sonuç büyük türde olur. Türler arasındaki çevrimler, aşağıdaki ilkelere göre yapılır:

1> char ve short değişkenler int'e çevrilir, float ise, double'a çevrilir.

2> Bundan sonra eğer değişkenlerin herhangi biri double ise, diğeri de double'a çevrilir ve sonuç double olur.

3> Aksi halde değişkenlerin herhangi biri long ise, diğeri de long'a çevrilir ve sonuç long olur.

4> Aksi halde değişkenlerin herhangi biri unsigned ise diğeri de unsigned'a çevrilir ve sonuç unsigned olur.

5> Aksi halde değişkenler mutlaka int olmalıdır ve sonuç da int olur.

Burada dikkat edilecek konu, tüm float değerlerinin double'a çevrilmesidir. Yani C dilinde tüm float (Tk. virgüllü sayı) işlemleri çift yoğunlukla yapılır. Çift yoğunlukla anlatılmak istenen, virgülden sonraki basamağın iki kat fazla olması, dolayısıyla sonucun doğruya daha hesaplanmasıdır.

Bu aylık da bu kadar. Gelecek ay ifadelerdeki tür değiştirmelerini, artırma ve eksiltme operatörlerini, bit düzeyli mantıksal operatörleri, eşleme operatörlerini, şartlı ifadeleri ve son olarak da operatör işlem öncelik sırasını toplu olarak göreceğiz. Hoşçakalın....

Klavyeyle gezinmek için ← ve → tuşları.