08.11.2014 Views

c_kitap

c_kitap

c_kitap

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

C ve Sistem Programcıları Derneği - C Ders Notları - Necati Ergin<br />

Yukarıdaki kod parçasında printf işlevi çağrısıyla<br />

x % y / 2 + 7 -x++ * y<br />

ifadesinin değeri ekrana yazdırılır. Yazdırılan değer nedir? İfade içindeki işleçler öncelik<br />

sıralarına göre değer üretir, üretilen değerler, diğer işleçlerin terimi olur. En son kalan<br />

değer ise ifadenin değeri, yani ekrana yazdırılan değer olur.<br />

Her programlama dilinde işleçlerin birbirlerine göre önceliği söz konusudur. Eğer öncelik<br />

kavramı söz konusu olmasaydı, işleçlerin neden olacağı işlemlerin sonuçları makineden<br />

makineye, derleyiciden derleyiciye farklı olurdu.<br />

C'de toplam 45 işleç vardır. Bu işleçler 15 ayrı öncelik seviyesinde yer alır.<br />

C dilinin işleç öncelik tablosu bölüm sonunda verilmiştir.<br />

Bir öncelik seviyesinde eğer birden fazla işleç varsa, bu işleçlerin aynı ifade içinde yer<br />

alması durumunda, işleçlerin soldan sağa mı sağdan sola mı öncelikle ele alınacağı da<br />

tanımlanmalıdır. Buna, öncelik yönü (associativity) denir. Ekteki tablonun 4. sütunu ilgili<br />

öncelik seviyesine ilişkin öncelik yönünü belirtiyor. Tablodan da görüldüğü gibi her öncelik<br />

seviyesi soldan sağa öncelikli değildir. 2, 13 ve 14. öncelik seviyelerinin sağdan sola<br />

öncelik yönüne sahip olduğunu (right associative) görüyorsunuz. Diğer bütün öncelik<br />

seviyeleri soldan sağa öncelik seviyesine (left associative) sahiptir.<br />

Bir simge, birden fazla işleç olarak kullanılabilir. Örneğin, ekteki tabloyu incelediğinizde<br />

'*' simgesinin hem çarpma işleci hem de bir gösterici işleci olan içerik alma işleci olarak<br />

kullanıldığını göreceksiniz. Yine '&' (ampersand) simgesi hem bitsel ve işleci hem de<br />

göstericilere ilişkin adres işleci olarak kullanılır.<br />

İşleçlerin Yan Etkileri<br />

C dilinde işleçlerin ana işlevleri, bir değer üretmeleridir. Ancak bazı işleçler, terimi olan<br />

nesnelerin değerlerini değiştirir. Yani bu nesnelerin bellekteki yerlerine yeni bir değer<br />

yazılmasına neden olurlar. Bir işlecin, terimi olan nesnenin değerini değiştirmesine işlecin<br />

yan etkisi (side effect) denir. Yan etki, bellekte yapılan değer değişikliği olarak tanımlanır.<br />

Örneğin atama işlecinin, ++ ve -- işleçlerinin yan etkisi vardır. Bu işleçler, terimleri olan<br />

nesnelerin bellekteki değerlerini değiştirebilir.<br />

İşleçler Üzerindeki Kısıtlamalar<br />

Programlama dilinin kurallarına göre, bazı işleçlerin kullanımlarıyla ilgili birtakım<br />

kısıtlamalar söz konusu olabilir. Örneğin ++ işlecinin kullanımında, işlecin teriminin nesne<br />

gösteren bir ifade olması gibi bir kısıtlama söz konusudur. Eğer terim olan ifade bir nesne<br />

göstermiyorsa, yani sol taraf değeri değilse, derleme zamanında hata oluşur.<br />

Kısıtlama, işlecin terim ya da terimlerinin türleriyle de ilgili olabilir. Örneğin kalan (%)<br />

işlecinin terimlerinin bir tamsayı türünden olması gerekir. Kalan işlecinin terimleri gerçek<br />

sayı türlerinden olamaz. Terimin gerçek sayı türlerinden birinden olması geçersizdir.<br />

İşleçlerin Yaptıkları İşlere Göre Sınıflandırılması<br />

Aşağıda işleçler yaptıkları işlere göre sınıflanıyor:<br />

Aritmetik işleçler (arithmetic operators)<br />

Bu işleçler aritmetik bazı işlemlerin yapılmasına neden olur. Toplama, çıkarma, çarpma,<br />

artırma, eksiltme işleçleri ile işaret işleçleri, aritmetik işleçlerdir.<br />

Karşılaştırma işleçleri (relational operators)<br />

Bu işleçlere ilişkisel işleçler de denir.<br />

Bu işleçler bir karşılaştırma işlemi yapılmasını sağlar. Büyüktür, büyük ya da eşittir,<br />

küçüktür, küçük ya da eşittir, eşittir, eşit değildir işleçleri karşılaştırma işleçleridir.<br />

Mantıksal işleçler (logical operators)<br />

75/529

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!