Standart C Programlama Dili


2.2. Bağıntısal Ve Mantıksal İşleçler

C dilinde dokuz işleç, doğru veya yanlış diye yorumlanabilecek değerler verir. C’nin özel bir Boolean (yani mantıksal) veri tipi yoktur ve bu işleçlerle oluşturulmuş bir ifadenin değeri, eğer ifade doğru ise, 1, yanlışsa 0’dır. Aslında, sıfırdan farklı her sayı C dilinde “doğru” anlamını taşır. Böyle bir sonucun tipi her zaman int’tir. Aşağıda, bu işleçler, azalan öncelik sıralarına göre anlatılmaktadır. Bütün doğruluk-değerli işleçler, struct ve türevleri dışında, her tipten işlenen kabul eder. Sağdan sola doğru birleşen ! tekli işleci dışında, burada anlatılan tüm işleçler soldan sağa birleşirler. Bağıntısal ve mantıksal işleçler değişmez ifadelerde de kullanılabilirler.

Mantıksal Olumsuzlama İşleci !

! (“değil”) işleci işlenenin mantıksal değerini olumsuzlar; yani eğer işlenen 0’sa 1 verir, eğer işlenen sıfırdan farklı ise 0 verir. Örnekler:

/* Bu ve bir sonraki kisimda; a=150, b=45.33, c=-132, d=0 */
!adeğeri 0’dır
!cdeğeri 0’dır
!ddeğeri 1’dir
!(b+c)değeri 0’dır
!!cdeğeri 1’dir

Bağıntısal İşleçler <, >, <=, Ve >=

Bu işleçlerin isimleri şöyledir:

İşleç İsim
< küçüktür
> büyüktür
<= küçük veya eşittir
>= büyük veya eşittir

Bağıntısal işleçler işlenenlerini karşılaştırır ve duruma göre doğru veya yanlış bir değer verirler. Örnekler:

a<bdeğeri 0’dır
b>=ddeğeri 1’dir
a>b>c(a>b)>c’ye eşdeğerdir ve değeri 1’dir
a<c<b(a<c)<b’ye eşdeğerdir ve değeri 1’dir

Eşitlik İşleçleri == Ve !=

== işleci, eğer işlenenleri eşitse 1, yoksa 0 verir. != işleci ise tam tersini yapar. Sık yapılan bir yanlış, == işleci yerine atama işlecini (=) kullanmaktır. Buna dikkat edin. Örnekler:

a==bdeğeri 0’dır
a=bdeğeri b’dir ve bir atama ifadesidir

Bizim sistemde,

x = 5.0/3.0;   /* x'in tipi float'tir */

deyiminden sonra,

5.0==3.0*x

ifadesi 0 (yani yanlış!) verir. Bunun nedeni hiçbir bilgisayarın, 1.666666··· sayısındaki sonsuz sayıda 6’yı saklayamamasıdır. Aynı sorun 3.0 yerine 25.0 de kullansanız ortaya çıkabilir. Genelde, kayan noktalı sayıların kesin olmasını bekleyemezsiniz, bundan dolayı (derleyici tarafından izin verilmesine rağmen) <=, >= ve eşitlik işleçlerinin işlenenleri olarak float tipinde ifadeler kullanmak tehlikelidir.

Mantıksal VE İşleci &&

&& işleci işlenenlerinin mantıksal VE’sini verir, yani eğer her iki işlenen doğru ise sonuç 1 olur, aksi takdirde 0’dır. Bu tanımdan, eğer işlenenlerden biri 0’sa sonucun kesinlikle sıfır olacağı ve diğer işlenenin değerinin hesaplanmasına gerek olmadığı açıktır. C, bu gerçeğe dayanarak, diğer bazı dillerin tersine, ilk işlenenin değeri 0’sa ikincisini hesaplamaz. Örnekler:

/* fn()'nin 657 veren bir fonksiyon oldugunu varsayin */
a&&bdeğeri 1’dir
d&&fn()değeri 0’dır ve fn() çağrılmaz
fn()&&ddeğeri 0’dır ve fn() çağrılır

Mantıksal VEYA İşleci ||

|| işleci işlenenlerinin mantıksal VEYA’sını verir, yani eğer her iki işlenen yanlış ise sonuç 0 olur, aksi takdirde 1’dir. Gördüğünüz gibi, eğer işlenenlerden biri sıfırdan farklı ise, öteki işlenenin değeri ne olursa olsun sonuç 1’dir. Yukarıda anlatılan yararlı özellik burada da geçerli olur; eğer ilk işlenen sıfırdan farklı ise, ikinci işlenen hesaplanmaz. Örnekler:

a||d!(!a&&!d)’e eşdeğerdir ve değeri 1’dir
a||bdeğeri 1’dir
c||ddeğeri 1’dir
d||(!c)değeri 0’dır