C programlama dilinde toplam 6 tane karşılaştırma işleci vardır:
< küçüktür işleci (less than) > büyüktür işleci (greater than) <= küçüktür ya da eşittir işleci (less than or equal) >= büyüktür ya da eşittir işleci (greater than or equal)
== eşittir işleci (equal) != eşit değildir işleci (not equal)
Bu işleçlerin hepsi, iki terimli, araek konumundaki (binary infix) işleçlerdir.
Diğer programlama dillerinin çoğunda bool ya da boolean (Matematikçi George Bool'un isminden) ismi verilen bir mantıksal veri türü de doğal bir veri türü olarak programcının kullanımına sunulmuştur. Böyle dillerde bool veri türü, yalnızca mantıksal doğru ya da mantıksal yanlış değerlerini alabilen bir türdür. Bu dillerde karşılaştırma işleçlerinin ürettiği değerler ise bu türdendir. Örneğin C++ ya da Java dillerinde durum böyledir.
C dilinde karşılaştırma işleçleri, oluşturdukları önermenin doğruluğu ve yanlışlığına göre int türden 1 ya da 0 değerini üretir. Önerme doğru ise 1 değeri üretilirken, önerme yanlış ise 0 değeri üretilir. Bu işleçlerin ürettiği değerler de tıpkı aritmetik işleçlerin ürettiği değerler gibi kullanılabilir.
signum işlevine gönderilen argüman 0'dan büyük bir değerse işlev +1 değerine, argüman 0'dan küçük bir değerse işlev -1 değerine, argüman 0 değeriyse işlev, 0 değerine geri dönüyor. signum işlevinin geri dönüş değeri, karşılaştırma işleçlerinin değer üretmesinden faydalanılarak elde ediliyor.
Bazı programlama dillerinde
gibi bir işlem hata ile sonuçlanır. Çünkü örneğin Pascal dilinde
ifadesinden elde edilen değer doğru (True) ya da yanlış (False) dir. Yani üretilen değer bool ya da boolean türündendir. Ama C doğal bir dil olduğu için karşılaştırma işleçlerinin ürettikleri değer bool türü ile kısıtlanmamıştır. C'de mantıksal veri türü yerine int türü kullanılır. Mantıksal bir veri türünün tamsayı türüyle aynı olması C'ye esneklik ve doğallık kazandırmıştır. C dilinde yazılan birçok kalıp kod, karşılaştırma işleçlerinin int türden 1 ya da 0 değeri üretmesine dayanır. Örneğin
Yukarıdaki deyim, C dili için son derece doğaldır ve okunabilirliği yüksektir. Bu deyimin yürütülmesiyle x değişkenine ya 1 ya da 0 değeri atanır. Karşılaştırma işleci, atama işlecinden daha yüksek öncelik seviyesine sahip olduğuna göre önce karşılaştırma işleci olan '==' değer üretir, işlecin ürettiği değer bu kez atama işlecinin terimi olur. Bu durumda y değişkeninin değerinin z değişkenine eşit olup olmamasına göre x değişkenine 1 ya da 0 değeri atanır
Karşılaştırma işlecinin kullanılmasında bazı durumlara dikkat edilmelidir:
Yukarıdaki ifade matematiksel açıdan doğru değildir. Çünkü 12 değeri 5 ve 9 değerlerinin arasında değildir. Ancak ifade C kodu olarak ele alındığında doğru olarak değerlendirilir. Çünkü 6. seviyede olan küçüktür (<) işlecine ilişkin öncelik yönü soldan sağadır. Önce soldaki '<' işleci değer üretecek ve ürettiği değer olan 1 sağdaki '<' işlecinin terimi olur. Bu durumda
ifadesi mantıksal olarak doğru olduğu için 1 değeri elde edilir.
< küçüktür işleci (less than) > büyüktür işleci (greater than) <= küçüktür ya da eşittir işleci (less than or equal) >= büyüktür ya da eşittir işleci (greater than or equal)
== eşittir işleci (equal) != eşit değildir işleci (not equal)
Bu işleçlerin hepsi, iki terimli, araek konumundaki (binary infix) işleçlerdir.
Diğer programlama dillerinin çoğunda bool ya da boolean (Matematikçi George Bool'un isminden) ismi verilen bir mantıksal veri türü de doğal bir veri türü olarak programcının kullanımına sunulmuştur. Böyle dillerde bool veri türü, yalnızca mantıksal doğru ya da mantıksal yanlış değerlerini alabilen bir türdür. Bu dillerde karşılaştırma işleçlerinin ürettiği değerler ise bu türdendir. Örneğin C++ ya da Java dillerinde durum böyledir.
C dilinde karşılaştırma işleçleri, oluşturdukları önermenin doğruluğu ve yanlışlığına göre int türden 1 ya da 0 değerini üretir. Önerme doğru ise 1 değeri üretilirken, önerme yanlış ise 0 değeri üretilir. Bu işleçlerin ürettiği değerler de tıpkı aritmetik işleçlerin ürettiği değerler gibi kullanılabilir.
Kod:
int signum(int val)
{
return (val > 0) - (val < 0);
}
signum işlevine gönderilen argüman 0'dan büyük bir değerse işlev +1 değerine, argüman 0'dan küçük bir değerse işlev -1 değerine, argüman 0 değeriyse işlev, 0 değerine geri dönüyor. signum işlevinin geri dönüş değeri, karşılaştırma işleçlerinin değer üretmesinden faydalanılarak elde ediliyor.
Bazı programlama dillerinde
Kod:
(val > 0) - (val < 0);
gibi bir işlem hata ile sonuçlanır. Çünkü örneğin Pascal dilinde
Kod:
val > 0
ifadesinden elde edilen değer doğru (True) ya da yanlış (False) dir. Yani üretilen değer bool ya da boolean türündendir. Ama C doğal bir dil olduğu için karşılaştırma işleçlerinin ürettikleri değer bool türü ile kısıtlanmamıştır. C'de mantıksal veri türü yerine int türü kullanılır. Mantıksal bir veri türünün tamsayı türüyle aynı olması C'ye esneklik ve doğallık kazandırmıştır. C dilinde yazılan birçok kalıp kod, karşılaştırma işleçlerinin int türden 1 ya da 0 değeri üretmesine dayanır. Örneğin
Kod:
x = y == z;
Yukarıdaki deyim, C dili için son derece doğaldır ve okunabilirliği yüksektir. Bu deyimin yürütülmesiyle x değişkenine ya 1 ya da 0 değeri atanır. Karşılaştırma işleci, atama işlecinden daha yüksek öncelik seviyesine sahip olduğuna göre önce karşılaştırma işleci olan '==' değer üretir, işlecin ürettiği değer bu kez atama işlecinin terimi olur. Bu durumda y değişkeninin değerinin z değişkenine eşit olup olmamasına göre x değişkenine 1 ya da 0 değeri atanır
Karşılaştırma işlecinin kullanılmasında bazı durumlara dikkat edilmelidir:
Kod:
int x = 12;
5 < x < 9
Yukarıdaki ifade matematiksel açıdan doğru değildir. Çünkü 12 değeri 5 ve 9 değerlerinin arasında değildir. Ancak ifade C kodu olarak ele alındığında doğru olarak değerlendirilir. Çünkü 6. seviyede olan küçüktür (<) işlecine ilişkin öncelik yönü soldan sağadır. Önce soldaki '<' işleci değer üretecek ve ürettiği değer olan 1 sağdaki '<' işlecinin terimi olur. Bu durumda
Kod:
1 < 9
ifadesi mantıksal olarak doğru olduğu için 1 değeri elde edilir.
Son düzenleme:
