C# Operatörleri

C# Operatörleri, Merhaba arkadaşlar, bugünkü dersimiz C# da OPERATÖRLER olacak. Daha önceki derslerde bahsettiğimiz değişkenler üzerinde işlem yapamaya yaran kullanışlı programlama elemanlarıdır. Değişkenler veya değerler üzerinde matematiksel veya mantıksal işlemler yapmak için kullanılan bu elemanları yazılım geliştirirken sıkça kullanacağız.

C# Operatörleri

Programlama dillerinde tek başlarına herhangi bir anlamı olmayan ancak programın işleyişine katkıda bulunan karakter ya da karakter topluluklarına operatör denir. Örneğin a+b ifadesinde + işareti bir operatördür. Operatörlerin etki ettikleri sabit ya da değişkenlere ise operand denir. Örneğin a+b ifadesinde a ve b birer operanddır. C# operatörleri nin bazıları tek, bazıları çift, bazıları da üç operand alır. Peki, eğer bir ifadede birden fazla operatör varsa ne olacak? Örneğin 2+3*7 gibi bir ifadede önce hangi işlem yapılacak? Burada önce toplama işlemi yapılırsa sonuç 35 olur, ancak önce çarpma işlemi yapılırsa sonuç 23 olur. İşte C#’ta bu gibi durumları önlemek için operatör önceliği diye kavram bulunmaktadır.

Operatör öncelikleri ile ilgili şu kuralları bilmenizde fayda var:
-Önce parantez içleri yapılır. Örneğin (3+5)*9 gibi bir ifadede önce toplama işlemi yapılır.
-İç içe parantezler söz konusuysa önce en içteki parantez yapılır, sıra ile dıştaki parantezlere gidilir. Örneğin (2+(9+2)*5)*2 gibi bir ifadede önce 9 ile 2 toplanıp 11 değeri bulur, sonra 11 ile 5 çarpılıp 55 değeri bulunur, sonra 55 ile 2 toplanıp 57 değeri bulunur, en son da 57 ile 2 çarpılıp 114 değeri bulunur.

C# Operatörleri

C# Operatörleri

Dikkat ettiyseniz yukarıdaki tablodaki bazı operatörler aynı sırada, yani bunların öncelik sırası eşit. C#’ta eğer operatörler eşit öncelikliyse, soldan sağa işlem yapılır.

int i = 3 * 5 / 7; // Farklı sonuçlar
Console.Write(i);

int k = 5 / 7 * 3; // Farklı sonuçlar
Console.Write(k);

HATIRLATMA
Matematiksel C# operatörü eğer işlem yapılan her iki operand farklı türdeyse sonuç daha üst kapasiteli türde tutulur.
Örneğin;

float i=2/5/2f;//5 değeri float gibidir
Console.Write(i);

Burada sonuç 0 çıkar. Çünkü zaten işlem yapılırken sonuç daha floata (2f) gelmeden sıfırlanmıştı.

float i=2f/5/2;
Console.Write(i);

Burada ise zincirleme olarak her işlemin sonucu floatlaşmakta ve sonuç ondalıklı çıkmaktadır.

C# Operatörü %

Bu C# operatörü belirlenen değerlerin matematiksel olarak MOD işlemine tabi tutulmasını sağlar. Sonuç olarak ise kalan değerini verir. Örneğin; 18 MOD 5 ifadesinde 19 öncelikle 5’e bölünür ve sonuç 3, kalan 4 olur. İşte % operatörü bize buradaki 4 değerini sağlar. Özellikle sayıların tek veya çift olup olmadıklarını kontrol etmede kullanır.

int i=5%2; // Sonuç 1
Console.Write(i);

C# Operatörleri Bir artırma ve bir eksiltme operatörleri

İlgili değişkenler üzerinde bir değer arttırmaya veya azalmaya yarayan kullanışlı bir C# operatörü dür.

int i=5; i++; //6 olur. Bu ifade aslında i=i+1; ifadesinin kısaltılmış halidir.
int i=5; i--; //4 olur.Bu ifade aslında i=i-1; ifadesinin kısaltılmış halidir.
int a=5;
int i=a++;
int b=i--;
int c=10;
int d=--c;
Console.Write("{0}\n{1}\n{2}\n{3}",a,i,b,d);

C# Karşılaştırma operatörleri

Bu C# operatörleri bool türünden değerleri operandlar vasıtasıyla üretmek için kullanılır. İki sayının birbirine göre büyüklüğünü ve küçüklüğünü kontrol ederler. Tabii ki yalnızca sayısal türdeki (char da dâhil) değişken ya da sabitlerle kullanılabilirler. Charla sayısal türler karşılaştırıldığında charın Unicode karşılığı hesaba katılır.

Bu operatörler şunlardır: < (küçüktür), > (büyüktür), <= (küçük eşittir), >= (büyük eşittir), == (eşittir), != (eşit değildir),

bool a=4<6;bool b=6>5;
bool c=7<=7;bool d=9>=12;
bool e=10==12;bool f=1!=8;
Console.Write("{0}\n{1}\n{2}\n{3}\n{4}\n{5}",a,b,c,d,e,f);

C# is operatörü

Verilen değişken, sabit ya da ifadenin türünü kontrol eder. Eğer söz konusu değişken, sabit ya da ifade verilen türle uyumluysa true değilse false değeri üretir.

int i=50;bool b1=i is int;
bool b2=i is double; bool b3=12 is byte;
bool b4='c' is string;
bool b5=12f+7 is int;
Console.Write("{0}\n{1}\n{2}\n{3}\n{4}",b1,b2,b3,b4,b5);

Bu program alt alta True, False, False, False ve False yazacaktır. Dikkat ettiyseniz 12 sabitini byte saymadı ve 12f+7 sabitini de int saymadı. Çünkü C#, harfsiz tam sayı sabitleri int sayar. 12f+7 sabiti de floatlaşmıştır.

C# Mantıksal operatörler

Bu C# operatörleri true veya false sabit ya da değişkenleri mantıksal ve, veya, değil işlemine sokarlar. Bunlar && (ve), || (veya) ve ! (değil) operatörleridir.

bool b1=35>10&&10==50; //false
bool b2=35>10&&10!=50; //true
bool b3=5 is int||12*3==200; //true
bool b4=5<4||45/5==9; //true
bool b5=!(5<4); //true
Console.Write(b1+" "+b2+" "+b3+" "+b4+" "+b5);

C# Bitsel operatörler

Bitsel operatörler sayıların kendisi yerine sayıların bitleriyle ilgilenirler. Diğer bir deyişle sayıları ikilik sisteme dönüştürüp öyle işlem yaparlar. Bu operatörler yalnızca tam sayı sabit, değişken ya da ifadelerle kullanılabilirler. Eğer bitsel operatörler bool türünden değişken, sabit ya da ifadelerle kullanılırsa mantıksal operatörlerin gördüğü işin aynısını görürler.

byte a=5&3;
//00000101&&00000011 -> 00000001 çıkar. 1
byte b=5|3;
//00000101|00000011->00000111 çıkar. 7
byte c=5^3;
//00000101^00000011 -> 00000110 çıkar. Yani 6 çıkar.
byte d=5; byte e=(byte)~d;
//00000101'in değili -> 11111010 çıkar. Yani 250 çıkar.
byte f=(byte)~(a+b); //00001000'ın değili -> 11110111 çıkar. Yani 247.
Console.Write(a+" "+b+" "+c+" "+e+" "+f+" "+g);

HATIRLATMA
Başında 0x veya 0X olan sayılar 16’lık düzende yazılmış demektir.

int a=0xff;//255 int b=0Xfe;//254
Console.Write(a+" "+b);

C# Bitsel kaydırma operatörleri

Bu operatörler (<< ve >>) sayıların bitlerini istenildiği kadar kaydırmak için kullanılır. << sayıları sola kaydırırken, >> sağa kaydırır.


byte b=100; //01100100
byte c=(byte)(b<<1); //b bir kez sola kaydırıldı ve 11001000 oldu. (200 oldu.) byte d=50; // 00110010 byte e=(byte)(d>>2); // d iki kez sağa kaydırıldı ve 00001100 oldu. (12 oldu.)
Console.Write(c+" "+e); 

ÖNEMLİ
-Sol tarafta kesinlikle yalnızca bir tane değişken olmalı. Örneğin aşağıdaki gibi bir kullanım hatalıdır.
– = operatöründe işlemler sağdan sola gerçekleşir ve = operatörü operandlarıyla birlikte atadığı değeri tutar.

byte b=7, a=1, c;
c=a=b;//Atama sağa doğu gerçekleşir.
Console.Write(a+" "+b+" "+c);//7 7 7

C# Atama ve işlemli atama operatörleri

– a=a+b; yerine a+=b;
– a=a-b; yerine a-=b;
– a=a*b; yerine a*=b;
– a=a/b; yerine a/=b;
– a=a%b; yerine a%=b;
– a=a<<b; yerine a<<=b; – a=a>>b; yerine a>>=b;
– a=a&&b; yerine a&&=b;
– a=a^b; yerine a^=b;
– a=a|b; yerine a|=b;

?: operatörü
?: operatörü C#’ta üç operand alan tek operatördür. Verilen koşula göre verilen değerlerden (object türünden) birini tutar.

Kullanım şekli ise;

koşul doğruysa_değer yanlışsa_değer

Console.Write("Emin misiniz?(E, H)");
string durum=Console.ReadLine();
Console.Write(durum=="E"?"İşlem Tamam!":"İşlem İptal Edildi.");

C# Stringleri yan yana ekleme operatörü (+)

C# operatörü “+” stringleri veya charları yan yana ekleyip operandlarıyla birlikte string olarak tutar. Ancak ifadedeki bütün bileşenlerin string olarak birleşebilmesi için ilk stringten önce charların yan yana gelmemesi gerekir. Yalnızca charlardan oluşan bir ifade stringleşmez.

C# typeof operatörü

Herhangi bir değişken türünün CTS karşılığını Type türünden tutar.

Type a=typeof(int);
Console.Write(a);

Bu program ekrana System.Int32 yazar.

Böylece bir dersin daha sonun gelmiş olduk. Umarım faydalı bir yazı olmuştur.

Dilerseniz bir önceki dersimiz olan Değişkenlerde tür dönüşümleri konusunu tekrar edebilirsiniz.

Bir sonraki yazımız C# akış kontrol mekanizmaları dersinde görüşmek üzere..