Temel C Programlama -11- Aritmetik Operatörler

Daha önceki örnekte basit bir toplama işlemini yapmıştık. Biz önceki yazılarımızda mikroişlemci mimarisinden, ALU’dan ve Assembly komutlarından bahsetmiştik. Bir mikroişlemcinin yaptığı matematik işlemleri dört işlemden öte gitmiyordu. Bilimsel hesap makinesinde bir tuşla yaptığımız karmaşık işlemler bu komutların bir araya gelip sırayla kullanılmasından ibaretti. Biz burada en temel işlemler olan dört işlem ve buna bağlı işlemlerle alakalı operatörleri anlatacağız. Karmaşık matematik işlemlerini bu komutların birlikte kullanılmasıyla yapıyoruz. C dilinde beş temel aritmetik operatör ve bunun yanında iki yan operatör bulunmaktadır. Şimdi bu operatörleri bir tablo halinde verelim ve size açıklayalım.

Operatör

Açıklama

+

Toplama

Çıkarma

*

Çarpma

/

Bölme

%

Mod (Kalan)

++

Artırma

Azaltma

Biz matematik işlemlerini bu işlemlere karşılık gelen operatörlerin sembollerini kullanmakla yaparız. Örneğin çarpma işleminde “x” işaretini kullanmak yerine “*” işaretini kullanmamız gereklidir. Bilgisayar programcılığında programlamanın en temel noktası değerler ve operatörler üzerinde yapılan işlemdir. Bütün bu döngü, karar ve fonksiyon yapılarını bir kenara bıraktığımızda ana program yapısının değişken değerleri ve operatörler ile yapılan işlemlerden meydana geldiğini görebiliriz. Aynı işlemcinin ana fonksiyonuları veya ALU fonksiyonları gibi programın temeli de bu operatörler ile yapılan işlemlerdir.

Şimdi tüm bu operatörleri kullandığımız bir programı çalıştıralım ve bunun üzerinden konumuza devam edelim.

#include <stdio.h>
#include <stdlib.h>
int main() {

   int a = 50;
   int b = 10;
   int c ;

   c = a + b;
   printf("C'nin Degeri : %i\n", c );

   c = a - b;
   printf("C'nin Degeri : %i\n", c );

   c = a * b;
   printf("C'nin Degeri : %i\n", c );

   c = a / b;
   printf("C'nin Degeri : %i\n", c );

   c = a % b;
   printf("C'nin Degeri : %i\n", c );

   c = ++a; // ++ önde bulunmalı işlem önceliği için. 
   printf("C'nin Degeri : %i\n", c );

   c = --a;
   printf("C'nin Degeri : %i\n", c );

 system("PAUSE");
 } // Main Sonu

Programı çalıştırdığımızda çıktısı şu şekilde olacaktır.

Öncelikle değişken olarak tanımladığımız tam sayı değerlere bir bakalım. a değişkeni 50 değerini, b değişkeni de 10 değerini içermekte. c değişkeni ise bir değer içermeyip bu işlem sonucunu barındıran sonuç değişkenidir. c = a + b; komutuyla a + b yani a ile b’nin toplamı c değerine aktarılır. Daha önceden a ve b değerinin işlem sonucunda değişmeyeceğini söylemiştik. Burada da c = 50 + 10 yani 60 sonucu c değişkenine aktarılır ve printf fonksiyonu ile c değişkeninin değeri yazdırılır.

Bir sonraki işlem ise c = a – b; yani çıkarma işlemidir. a’dan b çıkar ve c değişkenine aktarılır “=” operatörünün atama operatörü olduğunu unutmamanız gereklidir. c’nin önceki değerinin bir önemi yoktur ve elde edilen yeni değer c’nin değeri olur. Önceki değer silindiği için c’nin atama yapılmadan önceki değerinin 0 olduğunu düşünebiliriz. Bu durumda a değişkeni 50, b değişkeni de 10 olduğuna göre sonuç 50-10=40 olacaktır. c değişkenine 40 değeri aktarıldıktan sonra printf fonksiyonu ile ekrana yazdırılır.

Bir sonraki işlem ise c = a * b; şeklinde olan çarpma işlemidir. Bu noktaya kadar a ve b değişkenlerinin değerinin sabit kaldığına dikkat ediniz. Ne zaman atama operatörünün solunda olurlarsa o zaman değerleri değişir o yüzden şimdi 50 x 10 = 500 değerini elde etmemiz gereklidir. Bu işlem “*” operatörü ile yapıldıktan sonra c değişkenine aktarılmakta ve bir sonraki printf komutunda c değeri yazdırılmaktadır.

Dört işlemin son işlemi olarak c = a / b; komutunda bölme işlemini yaptık. a / b işlemi ile a değişkeni b değişkenine bölünür. a 50 değerinde b de 10 değerinde olduğu için 50 / 10 işlemini yaparız ve sonuç 5 olur. Ekranda da bunun sonucunu görmekteyiz.

Bundan sonra dört işlemi bitirsek de bu işlemlerde sıkça kullandığımız işlemleri yapan operatörler de C diline eklenmiştir. Aslına baktığımızda bilgisayar sistemlerinin ilkel hallerinde çarpma veya bölme işlemini yapan makine komutunun bile olmadığını görürüz. Çarpma işlemi toplama işleminin kısaltması, bölme işlemi de çıkarma işleminin kısaltması olduğundan bu işlemleri ilkel bilgisayarlar algoritma ile yapıyordu. Günümüzde ise “bir artırma” işlemi için bile ayrı işlemci komutu olduğunu görmekteyiz. Mod işlemi bize bölme işleminden kalan değeri verir ve % işareti ile gösterilir. Bölme işleminden kalan değeri elde etmek çarpan bulma işlemlerinde ve pek çok alanda işimize yaramaktadır. c = a % b; komutunda ise a’nın b’ye bölümünden kalan c değerine aktarılmaktadır. 50 % 10 = 0 olduğuna göre 0 değeri ekrana yazdırılacaktır.

Görüldüğü gibi programcılıkta derin matematik bilgisi gerekmemektedir. Aslında matematik işlemlerini yaptığımız operatörler bu kadarla sınırlıdır. Bu operatörleri beraber kullanarak karmaşık matematik işlemlerini gerçekleştiririz. Bu durumda formül ezberlemek veya formül çözmeye değil matematik yeteneğine ihtiyaç vardır. Bu yüzden programcılıkta matematiği lisede formül ezberleyip matematik sorusu çözmeye benzetmeyiniz. Matematik uygulamada olduğu zaman sizin sürekli çözümler getirmeniz ve formül uydurmanız gerekecektir. Bunu isteseniz en basit yoldan isterseniz de en karışık yoldan yapabilirsiniz.

Son iki işlem ise bir artırma ve bir azaltma işlemidir. ++ operatörüne tabi tutulan bir değişkenin değeri bir artırılır. c = ++a; dediğimizde önce a değişkeni bir artırılır sonra c değerine aktarılır. Eğer c = a++; deseydik önce a değişkeni c’ye aktarılacak sonra a değişkeni bir artırılacaktı. İşlem önceliğinin ne kadar önemli olduğunu görmeniz açısından ilk örnek karşımıza çıkmaktadır. ++ operatörü aslında şu komut ile aynı işlemi yapmaktadır.

a = a + 1;

Fakat hem kullanım kolaylığı hem de optimizasyon açısından ++ operatörünü kullanmamız daha iyi olacaktır. Daha önce bahsettiğimiz gibi mikroişlemcilerde bir artırmanın ve bir azaltmanın karşılığı olan bir komut vardır. Bu komut ise derleyicide ++ operatörüyle ilişkilendirilir. a = a + 1 dediğimizde derleyici optimizasyonu çok iyi değilse derleyici bunu uzun yoldan yapacak ve buna göre Assembly kodu üretecektir. Gömülü sistemlerde bizim performanslı program yazmamız şart olduğu için böyle inceliklere dikkat etmemiz lazımdır.

En son komutumuz ise c = –a; komutudur. Burada bir artırılmış a değeri tekrar bir azaltılır. Önceden 51 çıktısı elde ettiysek burada 50 çıktısı elde ederiz. Dikkat ederseniz bu operatör doğrudan a değişkenine etki etmektedir. Unary yani tek operandı olan (tekli) operatör olduğu için bu böyle olmaktadır. Bu operatörün açılımı ise şu şekildedir.

a = a - 1;

Burada yine — operatörünü başta kullandık. Size bu noktada tüyo vermemiz gerekirse bu operatörü tek başına kullandığınız zamanlar sağda diğer işlemlerle beraber kullandığınızda solda kullanmanızı tavsiye ederiz. Böylelikle yanlış işlem sonucundan korunmuş olursunuz.

Bir diğer konu ise aritmetik operatörlerde işlem önceliğidir. Öncelikle matematikte işlem önceliğini bir hatırlayalım. İşlemler soldan sağa doğru gitse de toplama ve çıkarmanın, çarpma ve bölmenin ayrı işlem dereceleri vardı. Önce soldan sağa çarpma ve bölme işlemlerini sırasıyla yapar sonrasında ise toplama işlemlerini yapardık. Burada da aynı şekildedir. Örneğin şöyle bir işlemin sonucunu hesaplayalım.

sonuc = 50 + 10 / 2;

Burada sonuç değeri 60 değil 55 olacaktır. Çünkü önce 10/2 işlemi uygulanarak 5 değeri elde edilir ve sonrasında 50 ile bu toplanır. En son olarak da 55 değeri sonuç değişkenine aktarılır. Eğer işlem önceliğinde oynama yapmak istiyorsak yine matematikte olduğu gibi parentezleri kullanırız.

sonuc = (50 + 10) / 2;

Burada önce parantez içindeki 50 ile 10 toplanır ve 60 değeri bulunur. Ardından elde edilen bu değer 2 ile bölünerek 30 değeri elde edilir. Parantezleri iç içe kullanmamız mümkündür. Bu noktada sizi yormamak için bu kadar ayrıntı ile yetiniyoruz. İlerleyen konularda karşımıza çıktığı noktada size daha ayrıntılı şekilde anlatacağız.

C’deki operatörler bunlarla hiç sınırlı olmasa da biz sadece aritmetik operatörleri vererek burada bırakalım. İlerleyen konularda lazım olduğu zaman bütün operatörleri sizlere sıra sıra anlatacağız.

Last updated