
Operatör nedir
Operatör; matematiksel işlemler yapmak, iki değeri karşılaştırmak, değişkenlere değer atamak, koşullar oluşturmak gibi şeyler için çeşitli sembollere, ifadelere verilen isimdir.
En basit haliyle bir toplama işlemi yaparken:
#include <iostream>
int main() {
int a{12};
int b{5};
int toplam{a + b};
std::cout << "Toplam: " << toplam << '\n';
return 0;
}yapabiliriz. a değişkenine 12, b değişkenine 5 değerini verdik. toplam değişkenini de a ve b değerlerine bağımlı şekilde yazdık.
En nihayetinde de ekrana toplam değerini yazdırdık. Yani:
Toplam: 17oldu.
Burada gördüğümüz + işareti tahmin edebileceğiniz üzere toplama anlamına geliyor ve buna toplama operatörü deniyor. Normalde int toplam = a + b şeklinde yazılırdı ancak biz int toplam{a + b} şeklinde yazdık. Bunun nedenini 3.derste öğrenmiştik.
Bu her ne kadar önemsiz gözükse de söyleyeceğim. Burada operatörün işlem yaptıklarına yani a ve b ye operand denir.
Bazı Operand Kullanımları
Bazı şeyler tek operand üzerinden değerlendirilebilir. Örneğin;
int sayi{10};
int sonuc{-sayi};burada sayi için 10 değerini verdik. Daha sonra - yazarak bunun eksilisini sonuc değerine atadık. Bu değer -10 oldu. İkili operand kullanımı ise:
int a{7};
int b{3};
int sonuc{a * b};şeklinde olabilir, sonuc değişkenine a ve b operandlarını çarparak verilen değeri atadık. Dolayısıyla sonuc 21 oldu. Koşul operatörü ise
#include <string>
int yas{20};
std::string durum{(yas >= 18) ? "Yetiskin" : "Cocuk"};şeklindedir. Burada durum değişkeni koşullu bir şekilde değer alıyor. >= operatörü karşılaştırma operatörüdür. Eğer yas >= 18 şartı sağlanıyorsa durum değişkenine "Yetiskin" atanır. Eğer şart sağlanmıyorsa "Cocuk" atanır. Bu durumda yas değeri 18'den büyük olduğu için durum değişkenimiz "Yetiskin" değerini aldı.
Aritmetik Operatörler
| Operatör | Adı | Görevi | Örnek |
|---|---|---|---|
+ | toplama | toplar | c = a + b |
- | çıkarma | çıkarır | a = c - 4 |
* | çarpma | çarpar | c = a * 8 |
/ | bölme | böler | b = a / c |
% | mod alma | bölümünden kalanı bulur | a = 21 % 5 |
+ | artı | önüne artı ekler | a = +a (etkisiz) |
- | eksi | önüne eksi ekler | a = -a (işaret değişti) |
toplama operatörü bazen iki metni birleştirmek için de kullanılır. Örneğin;
#include <iostream>
#include <string>
std::string ad{"Ali"};
std::string soyad{"Yilmaz"};
std::string tamAd{ad + " " + soyad};
std::cout << tamAd;Ali YilmazDiğer bazı örnekler:
int a{10 + 5}; // 15
int b{10 - 5}; // 5
int c{10 * 5}; // 50int a{7 / 2}; // 3
double b{7.0 / 2}; // 3.5
double c{7 / 2}; // 3.0burada gördüğünüz gibi int değeri tamsayı aldığı için ondalıklı kısmı kaldırdı. Ancak double değişkeninde korundu. Ancak önceki derslerde {} nin burada 3.5 değeri olamayacağından hata vermesini beklerdik diye düşünmüş olabilirsiniz.
Ancak burada bir daraltıcı söz konusu değil. Yani 7 sayısı da int, 2 sayısı da int ve ondalıklı atılınca kalan şey olan 3 de int. Önce tam sayı bölmesi yapılır ve yapılınca 3 kalır türü int olduğu için de problem teşkil etmez. Ancak eğer doğrudan int a{3.5}; deseydik elbette narrowing conversion hatasıyla yani daraltıcı dönüşüm ile karşılaşacaktık. Ya da int a{7.0 / 2}; yazsaydık oluşacak şey 3.5 değeri yani double değer olacak ve bize yine aynı derleme hatasını çıkaracaktı.
int a{3.0}; // Hata: daraltıcı dönüşüm
int b{3.0 + 0.0}; // Hata: sonuç double
int c{3}; // Geçerliolacaktır.
% yani Kalan Operatörü ise tamsayı bölmesinden kalan değeri verecektir.
int a{10 % 3}; // 1
int b{12 % 4}; // 0
int c{-10 % 3}; // -1Tek-çift kontrolü veya döngüler gibi şeyler için kullanılabilir. Mesela
int sayi{17};
if (sayi % 2 != 0) {
// Sayı tek.
}yada
#include <iostream>
int main(){
int sayi{};
std::cin >> sayi;
if (sayi % 2 != 0) {
std::cout << "Girdiginiz sayi tektir.";
}
else {
std::cout << "Girdiginiz sayi cifttir.";
}
return 0;
}gibi kontroller yapılabilir. Fonksiyonları bu iki operatörler dersinden sonra anlatacağım.
Bir de % operatörü noktalı türlerde kullanılamaz. Ayrıca payda sıfırsa davranış tanımsız olur (hata: undefined behavior). Bu / için de % için de geçerlidir.
Örnek
int a{5};
int b{2};
int tam{a / b}; // 2 — kesir atılır
double oran{5.0 / 2.0}; // 2.5
int kalan{a % b}; // 1Örnek — süreyi saate ve dakikaya bölmek:
int dakika{130};
int saat{dakika / 60}; // 2
int kalan_dakika{dakika % 60}; // 10Bileşik Atama Operatörleri
Bileşik atama operatörleri işlemi gerçekleştirip nesneyi değiştirmek için kullanılır. Mesela
int a{1};
int b{2};
a = a + b; // a = 3 olduint a{1};
int b{2};
a += b; // a = 3 olduyani a += b ve a = a + b aynıdır.
aynı şekilde
int a{5};
int b{3};
a = a - b; // a = 2 olduve a -= b ve a = a - b aynı.
bir tablo yapacak olursak:
| Operatör | Karşılığı | Yanisi |
|---|---|---|
+= | a += b | a = a + b |
-= | a -= b | a = a - b |
*= | a *= b | a = a * b |
/= | a /= b | a = a / b |
%= | a %= b | a = a % b |
bit işaretleri var yine bileşik atamayla alakalı. Seriyi takip ediyorsanız şuan öğrenmenize gerek yok.
| Operatör | Karşılığı | Yanisi |
|---|---|---|
&= | a &= b | bit için "ve" |
|= | a |= b | bit için "veya" |
^= | a ^= b | bit için dışlayıcı veya (XOR) |
<<= | a <<= b | biti sola kaydırma |
>>= | a >>= b | biti sağa kaydırma |
++x ve x++
Bu operatörler, bir nesnenin değerini bir arttırmak ve azaltmak için kullanılır.
int sayi{8};
++sayi; // 9
--sayi; // 8++x önce artırıyor, sonra değeri kullanıyor. x++ önce eski değeri veriyor, sonra artırıyor. Tek başına satırda x++; de çalışır. Fark, bu değeri başka bir değişkene veya ifadeye verdiğinde çıkar. O yüzden çoğu yerde ++x; yeter; x++i “eski değeri lazım” diye bilinçli kullan.
Örneğin
int a{5};
int x{++a}; // a = 6, x = 6bu örnekte a arttırılıyor x'e değer veriliyor.
int b{5};
int y{b++}; // y = 5, b = 6bu örnekte y'ye b'nin eski değeri verilir, sonra b artırılır.
Azaltma için de aynı şey geçerli.
Atama bir ifadedir
x = 5 hem atar hem o değeri üretir. Bu yüzden zincir kurulur:
int a{};
int b{};
b = a = 10; // önce a = 10, üretilen 10 b'ye gider. ikisi de 10Sağdan sola işler. 10 önce a'ya, sonra aynı değer b'ye yazılır.
Koşulda if (x = 5) yazmak x'i 5 yapar; karşılaştırmak değildir. Eşitlik == ile sorulur. Bunu bir sonraki derste kullanacağız.
--İleride başka bi operatör dersi daha yazacağım.



