Mantık Operatörleri
MANTIK OPERATÖRLERİ
Şimdiye kadar, sayici<=10, toplam>1000 ve sayi != nobetci_deger gibi basit durumları çalıştık. Bu koşulları > , < , >= , <= gibi karşılaştırma operatörleri ve == , != gibi eşitlik operatörleri sayesinde ifade ettik. Her karar yalnızca bir koşulu test ediyordu. Eğer karar verme sürecinde birden fazla koşulu test etmek istersek, bu testleri yuvalı if ya da if/else yapıları sayesinde gerçekleştiriyorduk.
C, basit koşulları birleştirerek daha karmaşık koşullar yaratmamamıza imkan veren mantık operatörlerine sahiptir. Mantık operatörleri, && (mantıksal ve), || (mantıksal veya) ve ! (mantıksal değil) olarak belirlenmiştir. Her biriyle ilgili örnekler vereceğiz.
Bir işlemin çalışmasını yönlendirmek için, iki koşulun aynı anda doğru olması gerektiğini düşünelim. Bu durumda && operatörü aşağıdaki biçimde kullanılır:
1 |
if ( cinsiyet ==1 && yas >= 65) |
Bu if ifadesi, iki basit koşul içermektedir.cinsiyet == 1 koşulu, bir kişinin kadın olup olmadığını belirlemek için hesaplanabilir. yas >= 65 koşulu ise, bu kişinin emekli olup olmadığını belirlemek için kullanılabilir. İki basit koşul önce hesaplanır çünkü >= ve == operatörleri && operatörüne göre önceliklidir. if ifadesi aşağıdaki birleştirilmiş koşulu dikkate almaktadır:
1 |
cinsiyet ==1 && yas >= 65
|
Bu koşul, yalnızca iki basit koşul da doğru ise doğrudur. Son olarak, eğer bu koşul doğru ise kadin_emekli değişkeni 1 arttırılacaktır. Eğer bu iki basit koşuldan herhangi biri yanlış ise program if yapısını atlayacak ve çalışmaya if yapısından sonraki ifadeyle devam edecektir.
Şekil 4.13, && operatörünü özetlemektedir. Tablo, deyim1 ve deyim2 için doğru ve yanlış olabilme ihtimallerinin tümünü göstermektedir. Bu tür tablolara doğruluk tabloları denir. C, karşılaştırma operatörleri, eşitlik operatörleri ve/veya mantık operatörlerini içeren tüm deyimleri 0 ya da 1 olarak hesaplar. Ayrıca C, doğru bir değeri 1 olarak kullanmasına rağmen, 0 haricindeki tüm değerleri de doğru olarak kabul eder.
deyim1 deyim2 deyim1&&deyim2
0 0 0
0 sıfırdan farklı değer 0 0
0 sıfırdan farklı değer 0
sıfırdan farklı değer sıfırdan farklı değer 1
Şimdi de || (mantıksal veya) operatörünü inceleyelim. Programımızda bir işlemin çalışmasını yönlendirmek için iki koşulun aynı anda ya da iki koşuldan birinin doğru olması gerektiğini düşünelim. Bu durumda, || operatörü aşağıdaki program parçacığında olduğu gibi kullanılır:
1 2 |
if ( donem_ortalamasi >= 90 || final_sinavi >= 90) printf ( "Öğrenci ortalaması A' dır\n" ); |
Bu ifade de iki basit koşul içermektedir. donem_ortalamasi>= 90 koşulu, öğrencinin dönem boyunca gösterdiği performanstan dolayı dersten A notu alması gerektiği koşulunu hesaplamaktadır. final_sinavi >=90 koşulu, öğrencinin final sınavından 90 ve üstü bir not almasından dolayı dersten A notu alması gerektiği koşulunu hesaplamaktadır. if yapısı aşağıdaki birleştirilmiş koşulu dikkate almaktadır.
1 |
donem_ortalamasi >=90||final_sinavi >=90
|
ve eğer iki koşuldan biri ya da ikisi de birden doğru ise öğrenciyi A notuyla ödüllendirmektedir. "Öğrenci ortalaması A'dır" mesajının yalnızca iki koşulda yanlışken yazdırılmadığına dikkat ediniz. Şekil 4.14, mantıksal veya ( || ) operatörünün doğruluk tablosunu göstermektedir.
deyim1 deyim2 deyim1||deyim2
0 0 0
0 sıfırdan farlı değer 1
sıfırdan farlı değer 0 1
sıfırdan farklı değer sıfırdan farlı değer 1
Şekil 4.14 Mantıksal veya operatörü (||) için doğruluk tablosu
&& operatörü, || operatörüne göre daha yüksek önceliğe sahiptir. İki operatörde soldan sağa doğru çalışmaktadır. && ya da || operatörlerini içeren bir deyim yalnızca doğruluk ya da yanlışlık durumu bilinene kadar hesaplanır. Bu sebepten,
cinsiyet = =1 && yas >= 65
koşulunun hesaplanması eğer cinsiyet == 1 deyimi yanlışsa ( yani tüm deyim yanlışsa ) duracaktır ve cinsiyet 1'e eşitse ( tüm deyim, eğer yas>=65 ise doğru olabilir ) devam edecektir.
Performans İpuçları 4.3
&& operatörünü kullanan deyimlerde en sola yanlış olma ihtimali daha fazla olan deyimi yerleştirin. || operatörünü kullanan deyimlerde doğru olma ihtimali daha fazla olan deyimi en sola yerleştirin. Bu, programın çalışma zamanını kısaltacaktır.
C, programcının bir koşulun anlamını tersine çevirmesine imkan sağlayan !(mantıksal değil) operatörüne sahiptir. && ve || operatörleri iki koşulu birleştirirken (bu sebepten ikili operatörlerdir), mantıksal değil operatörü yalnızca tek bir koşulu operand olarak kullanır. (bu sebepten tekli bir operatördür)
Mantıksal değil operatörü, koşul yanlış olduğunda izlenecek yolu belirlemek amacıyla koşulun başına yerleştirilir. Aşağıdaki program parçacığını inceleyiniz:
1 2 |
if ( ! ( not == nobetci_deger ) ) printf ( "Bir sonraki not %f'dir\n",not ); |
not == nobetci_deger koşulu, mantıksal değil operatörü eşitlik operatöründen daha yüksek önceliğe sahip olduğundan parantez içine alınmalıdır. Şekil 4.15'te, mantıksal değil operatörünün doğruluk tablosunu görebilirsiniz.
deyim !deyim
0 1
sıfırdan farklı değer 0
Şekil 4.15 mantıksal değil (!) operatörünün doğruluk tablosu.
Çoğu durumda programcılar, mantıksal değil operatörü yerine deyimi başka bir şekilde, karşılaştırma operatörleri kullanarak, yazıp aynı etkiyi yaratırlar. Örneğin, az önceki ifadeyi aşağıdaki biçimde yazmak mümkündür:
1 2 |
if ( not ! = nobetci_deger ) printf ( "Bir sonraki not %f 'dir\n",not); |
Şekil 4.16, şu ana kadar gösterilen operatörlerin öncelik sıralarını ve çalışma biçimlerini göstermektedir. Operatörlerin öncelikleri yukarıdan aşağıya doğru gidildikçe azalmaktadır.
Bilinmesi Gerekli
Arduino

Arduino ile bilgisayar programlarınızı gerçek dünyaya taşıyabilirsiniz.
İlk Transistör

Bell laboratuvarlarında icat edilen ilk transistör







