GirişOperatörler, değişkenler veya sabitler üzerinde matematiksel ve karşılaştırma işlemlerini yapan simgelerdir. Bazı kitaplarında operatör yerine
işlemci kelimesi de kullanılmaktadır. Derslerimiz boyunca bu iki ismi biribiri yerine kullanabiliriz. ANSI C'de dört tip operatör tanımlıdır.
Aritmetik OperatörlerDeğişken veya sabitler üzerinde temel aritmetik işlemleri gerçekleyen operatörlerdir. Bunlar Tablo 3.1'de listelenmiştir.
Tablo 3.1: Aritmetik Operatörler OperatörAçıklamaÖrnekAnlamı+
toplama
x+y
x ve y nin toplamı
-
çıkarma
x-y
x ve y nin farkı
*
carpma
x*y
x ve y nin çarpımı
/
bölme
x/y
x ve y nin oranı
%
artık bölme
x%y
x/y den kalan sayı
Atama OperatörleriBu operatörler bir değişkene , bir sabit eşitlemek için kullanılır.
Birleşik atama: bazı ifadelerde işlem operatörü ile atama operatörü birlikte kullanılarak, ifadeler daha kısa yazılabilir. Eğer ifade
değişken =
değişken [operatör]
ifade;
şeklinde ise, daha kısa bir biçimde
değişken [operatör]=
ifade;
olarak yazılabilir. Bu operatörler Tablo 3.2'de listelenmiştir.
Tablo 3.2: Atama Operatörleri OperatörAçıklamaÖrnekAnlamı=
atama
x=7;
x=7;
+=
ekleyerek atama
x+=3
x=x+3
-=
eksilterek atama
x-=5
x=x-5
*=
çarparak atama
x*=4
x=x*4
/=
bölerek atama
x/=2
x=x/2
%=
bölüp, kalanını atama
x%=9
x=x%9
++
bir arttırma
x++ veya ++x
x=x+1
--
bir azaltma
x-- veya --x
x=x-1
Program 3.1: Aritmetik ve atama operatörlerinin kullanımı
[color=gray] 1: /* 03prg01.c: Aritmetik ve atama operatorlerinin kullanimi */ 2: 3: #include <stdio>
4: 5: main()
6: {
7: int x, y;
/* yerel degikenlerin bildirimi */ 8: 9: x = 1;
/* x in baslangic degeri */10: y = 3;
/* y nin baslangic degeri */11: 12: printf(" x = %d ve y = %d, olarak veriliyor.\n", x, y);
13: 14: x = x + y;
15: printf("x <- x + y atamsinin sonucunda x=%d dir\n", x);
16: 17: x = 1;
/* x e tekrar 1 degeri ataniyor */18: x += y;
19: printf("x += y atamasinin sonucunda x=%d dir\n", x);
20: 21: return 0;
[color:b17b=gray:b17b]22: }
Bu program, x = x + y ataması ile x += y atamasın aynı anlamda olduğu gösterir. 9. ve 10. satırlarda x ve y değişkenlerine başlangıç değerleri atanmıştır. Bu değerler 12. satırda ekrana
Ders 5: Temel G/Ç Fonksiyonları ayrıntılı olarak işlenecek olan printf() fonksiyonu ile ekrana yazdırılmıştır. 14. ve 18. satırdaki ifadeler ekrana yazdırıldığında sonucun değişmediği görülür.
DERLEME ve ÇALIŞTIRMA Turbo C (MS DOS)
GCC (Linux)
C:\TC> tcc 03prg01.c
C:\TC> 03prg01
$ gcc 03prg01.c -o 03prg01
$ ./03prg01
ÇIKTI
x = 1 ve y = 3, olarak veriliyor.
x <- x + y atamsinin sonucunda x=4 dir
x += y atamasinin sonucunda x=4 dir
Karşılaştırma Operatörleri ve Mantıksal OperatörlerTablo 3.3'de listelenen bu operatörler, sayısal değerleri veya karakterleri karşılaştırmak için kullanılır. Bu operatörlerin kullanımı
Ders 7: Karşılaştırma Deyimleri kısmında gösterilecektir.
Tablo 3.3: Karşılaştırma Operatörleri ve Mantıksal Operatörler OperatörAçıklamaOrnekAnlamı>
büyüktür
x>y
x, y den büyük mü?
<
küçüktür
x<y>=
büyük-eşittir
x>=y
x, y den büyük yada eşit mi?
<=
küçük-eşittir
x<y>2 && x<y>2 || x<y
x 2 den büyük VEYA y den küçük mü?
Bit Düzeyinde İşlem Yapan OperatörlerSayısal veya karakter değişkenlerin üzerinde bit düzeyinde mantıksal işlem yapan operatörlerdir. Bunlar Tablo 3.4'te listelenmiştir.
Tablo 3.4: Bit düzeyinde işlem yapan operatörler OperatörAçıklamaÖrnekSonucu&
ve
10 & 25 (00001010 & 00011001)
8 (00001000)
|
veya
10 | 25 (00001010 | 00011001)
27 (00011011)
^
özel veya
10 ^ 25 (00001010 ^ 00011001)
19 (00010011)
~
değil
~10 (00001010)
245 (11110101)
>>
sağa kaydırma
12 >> 3 (00001100 >> 3)
1 (00000001)
<<
sola kaydırma
12 << 3 (00001100 << 3)
96 (01100000)
Bit düzeyinde işlem yapan operatörler C dilinde sıkça kullanılmakatadır. Örneğin
Ders 4: Kütüphane Fonksiyonları kısmında görülecek olan ctype.h kütphanesinde tanımlı toascii(c) makro fonksiyonu, c sayısı ile verilen ASCII koda sahip karakteri verir. Bu fonksiyon aslında Program 3.2'deki işlemi yapmakatadır.
Program 3.2: Bit düzeyinde VE işlemi
[color=gray] 1: /* 03prg02.c:
[color=gray] 2: Bir tamsayının ASCII karakter kod karşılığının bulunması.
[color:b17b=gray:b17b] 3: (ctype.h kütüphanesinde tanımlanan toascii(c) makrosuna ait kod) */
4: 5: #include <stdio>
6: 7: int c=65;
/* gloabal değişken bildirimi */ 8: char kr;
9: 10: void main()
11: {
12: kr = c & 0x7f;
/* kr = c & 127 */13: printf("%d sayisinin ASCII karsiligi %c\n",c,kr);
[color:b17b=gray:b17b]14: }
12. satırda kr değişkenine kr = 65 & 127 (01000001 & 01111111) işlemi kr = 65 (01000001) değeri atanmaktadır ve bu 'A' karakteridir. Eğer c>127 olursa 12. satırdaki işlemle bu sayı maskelencektir. Örneğin c=163 olduğunda kr=163 & 127 (10100011 & 01111111) = 35 (00100011) işlemiyle kr değişkenine 35 sayısına karşılık gelen '#' karakteri atanır. Oysa kr=c ataması yapılsaydı: k=163 (10100011) = 'ú'. Öyle ise 13. satırdaki işlemle kr = c & 127 = c-128 ataması gerçekleştirilmektedir.
DERLEME ve ÇALIŞTIRMA Turbo C (MS DOS)
GCC (Linux)
C:\TC> tcc 03prg02.c
C:\TC> 03prg02
$ gcc 03prg02.c -o 03prg02
$ ./03prg02
ÇIKTI
65 sayisinin ASCII karsiligi A