operatörler aslında birer fonksiyondur. Sentetik şeker gibi davranırlar. 2 tane tam sayının arasında bulunan + bir operatördür. Arka plana bakarsak bu 2 sayı alan bir fonksiyondan başka bir şey değildir.

Assignment Operator =

Sağ taraftaki değeri sol taraftaki değişkene atar.

	int a, x, y, z; 

	a = 5;
	x = y = z = 4;

	cout << a << endl;  
	cout << x << ", " << y << ", " << z << ", " << endl;
	
//  5
//  4, 4, 4,

Arithmetic Operators +, -, *, /, %

Temel matematiksel işlemleri bu operatörlerle yapıyoruz.

  • İşlemin hassasiyeti değişkenin hassasiyetine bağlıdır. Örneğin gerçek hayatta 7/3 = 2.33… iken integer tipinde değişkenle yaparsanız size 2 sonucu verecektir. Çünkü
int main() {
	int a, b, c;
	a = 5; b = 7; c = 3;
	cout << "a = 5; b = 7; c = 3;" << endl;
	cout << "a + b = " << (a + b) << endl;
	cout << "a - b = " << (a - b) << endl;
	cout << "a * b = " << (a * b) << endl;
	cout << "b / c = " << (b / c) << endl;
	cout << "b % c = " << (b % c) << endl;
}

Compound assignment

Atama operatörüyle aritmetik operatörlerin birleştirilmiş halidir.

expressionequivalent to…
y += x;y = y + x;
x -= 5;x = x - 5;
x /= y;x = x / y;
price *= units + 1;price = price * (units+1);

Increment and decrement (++, –)

Artırma, azaltma operatörleri. Değişkenin önüne veya arkasına yazılabilir. Eğer önüne yazarsak prefix, arkasına yazarsak postfix diye geçer. Değeri 1 artırır/azaltır.

int i = 0;
i++; // 1
i--; // 0

prefix ile postfix arasındaki fark ise, prefixde değişkenin değeri öncelikle bir artırılır sonra kullanılacak yer varsa yeni değeri ile kullanılır. Postfix de ise öncelikle değişken kullanılır sonra da değeri artırılır:

#include <iostream>
using namespace std;

int main() {
	int i = 0, j = 0;

	cout << "i " << i << "\t";
	cout << "j " << j << endl;

	cout << "i++ " << i++ << "\t";
	cout << "++j " << ++j << endl;
	cout << "i++ " << i++ << "\t";
	cout << "++j " << ++j << endl;
}

// i 0     j 0
// i++ 0   ++j 1
// i++ 1   ++j 2

Relational and comparison operators ( ==, !=, >, <, >=, <= )

Sağdaki ve soldaki değeri karşılaştırıp mantıksal(boolean) bir değer döndürür.

#include <iostream>
using namespace std;

int main() {
	int a, b, c;
	a = 5; b = 3; c = 5;

	cout 
		<< "a: " << a << "\t"
		<< "b: " << b << "\t"
		<< "c: " << c << endl << endl;
	cout 
		<< "(a > b)  \t" << (a > b)  << endl
		<< "(a < b)  \t" << (a < b)  << endl
		<< "(a == b) \t" << (a == b) << endl
		<< "(a != b) \t" << (a != b) << endl
		<< "(a == c) \t" << (a == c) << endl
		<< "(a != c) \t" << (a != c) << endl
		<< "(a <= c) \t" << (a <= c) << endl
		<< "(a >= c) \t" << (a >= c) << endl
		<< "(a <= b) \t" << (a <= b) << endl
		<< "(a >= b) \t" << (a >= b) << endl;
		
}


//	a: 5    b : 3    c : 5
//
//	(a > b)         1
//	(a < b)         0
//	(a == b)        0
//	(a != b)        1
//	(a == c)        1
//	(a != c)        0
//	(a <= c)        1
//	(a >= c)        1
//	(a <= b)        0
//	(a >= b)        1

Logical operators ( !, &&, || )

Mantıksal değerler arasında karşılaştırma yaparlar.

&& and anlamına gelir. Eğer her iki ifade ancak ve ancak doğru ise doğru diğer tüm koşullarda yanlış döndürür.

|| or anlamına gelir. Eğer her iki ifadeden en az bir tanesi doğru ise doğru döndürür; eğer her iki ifadede yanlış ise yanlış döndürür.

! not anlamına gelir ve başına geldiği ifadenin değilini alır. Yani doğru ise yanlış; yanlış ise doğru yapar.

#include <iostream>
using namespace std;

int main() {


	cout << "! NOT operator: \n";
	cout
		<< "true   \t" << (true) << endl
		<< "!true  \t" << (!true) << endl;

	
	cout << "\n\n&& AND operator: \n";
	cout
		<< "true  && true  \t" << (true  && true) << endl
		<< "true  && false \t" << (true  && false) << endl
		<< "false && true  \t" << (false && true) << endl
		<< "false && false \t" << (false && false) << endl;

	cout << "\n\n|| OR operator: \n";
	cout
		<< "true  || true  \t" << (true  || true) << endl
		<< "true  || false \t" << (true  || false) << endl
		<< "false || true  \t" << (false || true) << endl
		<< "false || false \t" << (false || false) << endl;
		
}


// !NOT operator:
// true    1
// !true   0
// 
// 
// && AND operator :
// 	true && true   1
// 	true && false  0
// 	false && true   0
// 	false && false  0
// 
// 
// || OR operator:
// true || true   1
// true || false  1
// false || true   1
// false || false  0

short-circuit evaluation

&& ve || operatörlerinin solundaki ifade (ilk ifade) eğer mantıksal sonucu vermek için yeterli ise sağındaki ifadeye bakılmaz/çalıştırılmaz.

Örneğin false && true VEYA false && false gelmesi durumunda && operatörü false değerini döndürecek. Yani aslında sağdaki ifadenin

#include <iostream>
using namespace std;

bool f() {
	cout << "f fonksiyonu calisti" << endl;
	return true;
}

int main() {
	cout << "Eger ilk ifade false olursa: " << endl;
	cout << (false && f()) << endl << endl;

	cout << "Eger ilk ifade true olursa: " << endl;
	cout << (true && f()) << endl;
}

// Eger ilk ifade false olursa:
// 0
// 
// Eger ilk ifade true olursa :
// 	f fonksiyonu calisti
// 	1

aynı durum || ifadesi için de geçerli. Eğer ilk ifade true ise her zaman true döneceği için ikinci ifade çalışmaz/bakılmaz.

Conditional ternary operator ( ? )

if, else bloğunun kısaltılmış halidir.
koşul ? doğru gelmesi durumu : yanlış gelmesi durumu
şeklinde çalışır.

	bool b = true;
	cout << (b ? "dogru" : "yanlis") << endl;

Comma operator ( , )

Tek bir ifadenin yazılabileceği yerlere birden fazla ifade yazmak için kullanırız. İfadeler soldan sağa doğru çalışır ve en sağdaki ifade return eder.

	int a = 5, b = 20; 
	cout << (++a, ++b) << endl; 
	cout << "a: " << a << "\tb: " << b << endl; 
	// 21
	// a: 6    b: 21

Bitwise operators ( &, |, ^, ~, <<, >> )

Explicit type casting operator

sizeof

Other operators

Precedence of operators

https://cplusplus.com/doc/tutorial/operators


Comments

Leave a Reply

Your email address will not be published. Required fields are marked *