1. sayfa (Toplam 1 sayfa)

Programlama Dillerinde Operatörler

Gönderilme zamanı: 16 Kas 2013, 21:37
gönderen TRWE_2012
Programlama Dillerinde Operatörler
---------------------------------------------------------------------------------------------------------------------------
Operatörler
Her dilin kendine göre kuralları olmakla birlikte bazı temel taşlar dediğimiz her dilde de aynı özellikleri taşıyan yapılar vardır. İşte bu dersimiz bu temel taşlardan biri olan Operatörleri mercek altına alacağız. Özellikle C ve Pascal dillerinde bu karşılaştırmayı yaparak daha iyi anlaşılacağını düşünüyorum.
OPERATÖRLERİN SINIFLANDIRILMASI

Operatörleri üç biçimde sınıflandırabiliriz:
<LI class=Msonormal style="MARGIN: 0cm 0cm 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l5 level1 lfo1; tab-stops: list 36.0pt">Operatörlerin İşlevlerine Göre Sınıflandırılması <LI class=Msonormal style="MARGIN: 0cm 0cm 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l5 level1 lfo1; tab-stops: list 36.0pt">Operatörlerin Operand Sayılarına Göre Sınıflandırılması
Operatörlerin Konumlarına Göre Sınıflandırılması
OPERATÖRLERİN İŞLEVLERİNE GÖRE SINIFLANDIRILMASI

Operatörleri temel olarak işlevlerine göre 6 gruba ayırabiliriz:
1.Aritmetik Operatörler
2. İlişkisel Operatörler
3. Mantıksal Operatörler
4. Bit Operatörler
5. Gösterici Operatörleri
6. Özel Amaçlı Operatörler
Matematiksel (Aritmetik) Operatörler
Matematiksel işlemlerimizi yaptırabilmemiz için aşağıdaki operatörleri kullanabiliriz.
İlişkisel Operatörler
İlişkisel operatörler iki değer arasındaki ilişkiyi sorgularlar. Bunlara "karşılaştırma operatörleri" de denir.
Mantıksal Operatörler
Mantıksal işlemler yapan operatörlerdir. Ve, veya, değil gibi bilgisayarında temelini oluşturan ifadelerin değer kazanmasını sağlayan operatörlerdir.
Bit Operatörler
Bit seviyesinde işlem yapan operatörlerdir.
Gösterici Operatörleri
Adres işlemlerinde kullanılan operatörlerdir.
Özel Amaçlı Operatörler
Fonksiyon çağırma (Önceden hazırlanmış bir işlevi istenilen yerde çalışmasını sağlamak) ve öncelik değiştirme, yapı elemanına erişme, tür dönüştürme (girilen karakterlerin sayıya çevrilmesi), Uzunluk, Koşul, Atama, İşlemli atama
C dilinde Operatörler
Operatörler, nesneler veya sabitler üzerinde önceden tanımlanmış birtakım işlemleri yapan atomlardır. Operatörler mikroişlemci tarafından bir faaliyete neden olurlar ve bu faaliyet sonunda da bir değer üretilmesini sağlarlar. Programlama dillerindeki her operatör bir yâda birden fazla makine komutuna karşılık gelir.
C’de her ifade en az bir operatör içerir. İşte örnekleri:

c=a * b / 2;
3 operatör vardır: =, *, /
d = fonk();
2 operatör vardır: =, ()
c = a > 4;
2 operatör vardır: =, >
++x
1 operatör vardır: ++
......
......

Her operatörün operandları (değişken) vardır. Değişken nesnesi tam olarak karşılamadığı için Operand’ı tercih ettim. İşleme giren anlamında düşünelim. Operandlar operatörlerin işleme soktukları sabitler ya da nesnelerdir:
a + b
Operatör: +, operandları: a ve b
b > 3
Operatör: ++ , operandları: b ve 3

Aritmetik operatörler 4 işlemle ilişkili olan operatörlerdir:
*
Çarpma
/
Bölme
%
Mod alma (bölümden elde edilen kalan)
+
Toplama
-
Çıkartma

İlişkisel operatörler iki değer arasındaki ilişkiyi sorgularlar. Bunlara "karşılaştırma operatörleri" de denir:
>
Büyük
<
Küçük
>=
Büyük ya da eşit
<=
Küçük ya da eşit
= =
Eşit
!=
Eşit değil

Mantıksal operatörler mantıksal işlemler yapan operatörlerdir.
!
Değil (not)
&&
Ve (and)
II
Veya (or)

Bit operatörleri bit seviyesinde işlemler yapar:
~
Değil (bitwise not)
<<
Sola kaydırma (left shift)
>>
Sağa kaydırma (right shift)
&
Ve (bitwise and)
^
Özel veya (bitwise exor)
I
Veya (bitwise or)

Gösterici operatörleri adres işlemlerinde kullanılan operatörlerdir:
*
İçerik Alma (indirection)
&
Adres alma (adress of)
[]
İndeks (index)
->
Yapı gösterici

Özel amaçlı operatörler:
( )
Fonksiyon çağırma ve öncelik değiştirme
.
Yapı elemanına erişme
(tür)
Tür dönüştürme
sizeof
Uzunluk
?:
Koşul
=
Atama
+=, *=, /=, ...,
İşlemli atama

OPERATÖRLERİN OPERAND SAYILARINA GÖRE SINIFLANDIRILMASI

Operatörleri işleme soktukları operandların sayılarına göre de sınıflandırabiliriz:
1.1 operandlı operatörler (Unary Operators)
2. 2 operandlı operatörler (Binary Operators)
3. 3 operandlı operatörler (Ternary operators)
Programlama dillerinde 2’den fazla operand alan operatörlere pek rastlanmaz.C’de 3 operand alan ve ismine "koşul operatörü"
denilen istisna bir operatör vardır.

Örneğin;
*, /, +, -, =, %, <=, = =, >=, ... iki operandlı operatörlerdir.
++, - -, !, .... tek operandlı operatörlerdir.
OPERATÖRLERİN KONUMLARINA GÖRE SINIFLANDIRILMASI

Operatörleri konumlarına göre 3 gruba ayırabiliriz:
1.Önek(prefix) operatörler
2. Araek(infix) operatörler
3. Sonek(postfix) operatörler

NOT: Hatta bunların fonksiyonlarını hazırlatmak için Bilgisayar Mühendisliğinde ödevler verilir.Gerekli olan varsa temin ederim… maXXTor
Bir operatörün operandlerının önünde bulunmasına önek (prefix) durumu denir. Sembolik makine dillerinde (assembly languages) operatörlerin operandlarının önünde (prefix) bulunduğunu görüyoruz.
MOV AX, BX ifadesinde AX ve BX birer operand; MOV ise bir operatördür.

Operatör operandlarının arasında bulunuyorsa buna araek(infix) durumu denir.
a + b ifadesinde a ve b birer operand; + ise bir operatördür.

Operatör operandlarının arkasında bulunuyorsa buna da sonek(postfix) durumu denir.
a++ ifadesinde a bir operand; ++ ise operatördür. ++ operatörü prefix durumunda da bulunabilir: ++a .
ARİTMETİK OPERATÖRLER

Aritmetik operatörler dört işlemle ilgili olan operatörlerdir. Aritmetik operatörlerin listesi ve kendi aralarındaki önceliği şöyledir:
++ --
Sağdan sola


+ / %
Soldan sağa


+ -
Soldan sağa


=
Atama operatörü C’nin en düşük öncelikli operatörlerinden birisidir.



+ ve - Operatörleri
İki operandlı (binary) araek(infix) operatörlerdir.+ iki operandı toplamak , - iki operandın farkını almak için kullanılır. operandlar herhangi bir türden olabilir.
* ve / Operatörleri
İki operandlı araek operatörlerdir.* operandları çarpmak, / ise operandları bölmek için kullanılır. Operandlar herhangi bir türden olabilir.+ ve - operatörlerinden önceliklidirler.
% Operatörü
İki operandlı araek bir operatördür.% operatörü sol taraftaki operatörün sağ taraftaki operatöre bölümünden elde edilen kalanı bulmak için kullanılır.% operatörünün iki operandı da tamsayı türlerinden (char, int, long, short) olmalıdır.
Örneğin;
c = 10 % 3;

10’un 3’e bölümünden elde edilen kalan 1’dir. (c=1)

% operatörü , * ve / operatörleri ile soldan sağa eşit önceliğe sahip; + ve - operatörlerinden daha yüksek önceliklidir.
Örneğin;
c=10 % 4 katılıyorum ;
İŞLEM1: 10 % 4 =2
İŞLEM2: İŞLEM1 katılıyorum =3
İŞLEM3: c=İŞLEM2
Artırma (++) ve Eksiltme (--) Operatörleri
Tek operand alırlar. Önek ya da sonek durumunda bulunabilirler.++ operatörü operandı olan değişkenin içeriğini bir artırmak; -- operatörü operandı olan değişkenin içeriğini bir eksiltmek için kullanılır. Bu operatörler diğer aritmetik operatörlerden daha yüksek önceliğe sahiptir.
İşlevlerini iki biçimde inceleyebiliriz:
1.Yalın olarak kullanıldıklarında ( başka hiçbir operatör olmaksızın ) önek ya da sonek durumları arasında hiçbir fark yoktur.++, "1 artır"; -- ise "1 eksilt" anlamına gelir.
++x;, x++; ikisi de aynı anlama gelir ve x = x + 1; demektir.
--x;, x--; ikisi de aynı anlamdadır ve x = x - 1; demektir.

Örneğin;
...
x = 10;
++x; /*x=11*/
x++; /*x=12*/
...
x = 20;
--x; /*x=19*/
x--; /*x=18*/
...
2.Diğer operatörlerle birlikte kullanıldığında (örneğin atama operatörü ile) önek e sonek biçimleri farklı anlamlara gelir:
Önek durumunda artırma ve eksiltme işlemi, diğer aritmetik operatörlerden daha yüksek öncelikli yapılır.
x = 10;
y = ++x;
/* x = 11, y = 11 */
Burada x = x katılıyorum işlemi yapılır; böylece x =11 olur. Daha sonra bu değer y’ye atanır.
++ ve -- sonek durumundaysa artırma ve eksiltme işlemi söz konusu ifadenin en son işlemi en son işlemi olacak biçimde yapılır.
x = 10;
y = x++;
/* x = 11, y = 10*/
Bu örnekteki, y = x++ ifadesini ele alalım. ++ sonek durumunda olduğundan artırım hemen değil, ifadenin son işlemi olacak biçimde, ifadenin en sonunda yapılır. Yani y değişkenine x’in içindeki ifade atanır; daha sonra x’in değeri 1 artırılır.

Örnek1;
x = 10;
y = 5;
z=x ++ % * 4 --y;
İşlem sırası:
i1: --y........4
i2: x % 4 .....2
i3: i2 * i1 ...8
i4: z=i3.......8
i5: x++........11
Bu durumda x = 11, y = 4, z =8 ’dir.
Örnek2;
c = 20;
d = 10;
a = b = d + c --;
İşlem sırası:
i1: d + c........30
i2: b = i1...30
i3: a = i2....30 a = b demektir.
i4: c--.......19
Bu durumda a = 30, b = 30, c = 19, d = 10 olur.
Örnek3;
a = 10;
b = a++ + ++a;
İşlem sırası:
i1: ++a........11
i2:a + i1......22
i3: b = i2....22 a = b demektir.
i4: a = a + 1.......12
Bu durumda a = 12, b = 22, olur.
3.Fonksiyon çağrılırken aynı değişken birden fazla parametre içinde kullanılmşsa , hiçbiri ++ ve -- operatörleriyle ,işleme sokulmuş olmamalıdır.Örneğin;
a = 10;
b = fonk(a , ++a);
ifadesinde fonksiyon hangi parametrelerle çağrılıyor.? fonk(10, 11) ile mi, yoksa fonk(11,11) ile mi? Şimdi siz fonk(10,11) ile çağrılmasının daha uygun olduğunu düşünebilirsiniz. Oysa sistemlerin çoğunda parametreler sağdan sola doğru ele alınırlar.
Bir değişken parametre olarak ( diğer parametrelerle kullanılmamak koşuluyla önek ya da sonek durumunda bulunabilir. Aşagıdaki ifadeler geçerlidir
b = fonk(++a)
......
b = fonk(a++);
Artırma ve eksiltme operatörlerinin operandı mutlaka bir nesne olmalıdır.
İLİŞKİSEL OPERATÖRLER

İlişkisel operatörler iki değer arasında karşılaştırma yapan operatörlerdir.Bu nedenle bu operatörlere karşılaştırma operatörleri de denir. İlişkisel operatörlerin hepsi iki operand alır. Aralarındaki öncelik ilişkisi aşağıdaki gibidir:
< > >= <= Soldan sağa
== != Soldan sağa
İlişkisel operatörler ile aritmetik operatörler arasında öncelik ilişkisinin de basit bir kuralı vardır:
Bütün ilişkisel operatörler aritmetik operatörlerden düşük önceliklidir
Programlama dillerinin çoğunda mantıksal veri türleri vardır ve ilişkisel operatörlerin ürettiği değerler bu türlerdendir. Oysa C’de mantıksal veri türü yerine yine int türü kullanılır. Mantıksal bir veri türünün tamsayı türü ile aynı olması C’ye esneklik ve doğallık kazandırmıştır.
C’ de ilişkisel operatörlerin ürettiği değerler , "koşul sağlanıyorsa 1, sağlanmıyorsa 0 " olan int türünden değerlerdir.
Örnek1;
a = 5 > 2; /*a = 1*/
....
b = 3 == 3; /* b = 1*/
....
c = 4 <= 1; /* c = 0*/
Örnek2;
x = 10;
y = 20;
z = y <= x + 10;
İşlem sIRASI:
i1: x + 10......20 Aritmetik operatörü öncelikli
i2: y <= i1.....1 20<=20 koşulu sağlanıyor, üretilen değer 1
i3: z = i3......1 Atama operatörü en az önceliklidir.
Örnek3;
a = 10;
b = 20;
c = a == 10 > b katılıyorum;
İşlem Sırası:
i1: b + 1.......21 Aritmetik + operatörü öncelikli
i2: 10 < i1.....1 < operatörü == operatöründen daha öncelikli
i3: a == i2.....0 Koşul sağlanmıyor
i4: c = i3......0
Örnek4;
a = 10 * 2 katılıyorum >= 4 * 4 +5 == 5 > 5 - 3 * 2;
İşlem Sırası;
i1: 10 * 2.............20
i2: 4 * 4..............16
i3: 3 * 2..............6
i4: i1 + 1.............21
i5: i2 + 5.............21
i6: 5 - i3.............-1
i7: i4 >= i5...........1
i8: 5 > i6.............1
i9: i7 == i8...........1
i10: a = i9............1
MANTIKSAL OPERATÖRLER

Operandları üzerinde mantıksal işlem yapan operatörlerdir. Bu operatörler operandlarını Doğru (true) ya da Yanlış (false) olarak yorumladıktan sonra işleme sokarlar. C’ de öncelikleri birbirinden farklı üç tane mantıksal operatör vardır:
! Değil(not) Sağdan sola
&& Ve (and) Soldan sağa
II Veya(or) Soldan sağa
! (değil) operatörü tek operand alır ve her zaman önek durumundadır; diğer iki operatör ise iki operandlıdır ve araek durumundadırlar.
1.C’de Mantıksal Doğru ve Yanlış Değerleri
Programlama dillerinin hepsinde mantıksal işlemler iki tür veri üzerinde gerçekleştirilirler: Doğru ve Yanlış. Mantıksal operatörlerin ürettikleri değerler yine "doğru" ya da "yanlış" olabilen mantıksal değerlerdir. İlişkisel operatörleri açıklarken değinmiştik: C’de mantıksal veri türü olmadığından, mantıksal veriler yerine tamsayılar kullanılmaktadır.
C’de ilişkisel bir operatörün ürettiği değer , koşulun sağlanma durumuna göre 1(Doğru) ya da 0(Yanlış) sayılarıdır; ancak bir sayı mantıksal olarak yorumlanacağı zaman şu kural geçerlidir:
-Sayı sıfır ise Yanlış.
-Sayı sıfır dışı bir değer ise , yani negatif ya da pozitif herhangi bir sayı ise Doğru.
Örneğin aşağıdaki sayıların mantıksal yorumlarını inceleyelim:
-11 Doğru
0 Yanlış
+99 Doğru
Bir ilişkisel operatör herhengi iki türden operand alabilir, fakat ürettiği değer 1 ya da 0 tamsayılarıdır. Bu sayılar mantıksal operatörler tarafından Doğru ya da Yanlış olarak yorumlanırlar. Mantıksal operatörlerin de ürettikleri değerler ilişkisel operatörlerde olduğu gibi "int" türünden "1(doğru)" ya da "0(Yanlış) " sayılarıdır.
2.Mantıksal Operatörlerin Diğer Operatörlere Göre Öncelik Durumları
Değil operatörü(!) dışındaki iki mantıksal operatör, ilişkisel operatörlerden düşük önceliklidir. Değil operatörü ise en yüksek önceliğe sahip aritmetik operatörlerden artırma(++) ve eksiltme(--) ile sağdan sola eşit önceliklidir.
Şimdiye kadar incelediğimiz operatörlerin öncelik sıralarını yüksek öncelikten düşük önceliğe doğru şu şekilde özetleyebiliriz:
( )
Soldan Sağa
! ++ __
Sağdan sola
* / %
Soldan sağa
+ -
Soldan sağa
> >= < <=
Soldan sağa
== !=
Soldan sağa
&&
Soldan sağa
II
Soldan sağa
=
Sağdan Sola

Değil (not) İşlemi ve ! Operatörü
Tek operand alan ve her zaman önek durumunda bulunan ! operatörü Doğru değerini Yanlış değere; Yanlış değerini Doğru değere dönüştürür.

Herkese İyi Günler
TRWE_2012
Düzce_Akçakoca
:oops: :oops: :) :)