Öğrenilmesi gerekenler: Operatör, operand Öncelik sırası OPERATÖRLER Öğrenilmesi gerekenler: Operatör, operand Öncelik sırası
Operatör nedir? Operatörler, nesneler veya sabitler üzerinde önceden tanımlanmış birtakım işlemleri yapan atomlardır.
C de her ifade en az bir operatör içerir. c=a*b/2; 3 operatör var: =*/ d=fonk(); 2 operatör var: =() c=a>4; 2 operatör var: => ++x; 1 operatör var: ++
Her operatörün operandları vardır Her operatörün operandları vardır. Operandlar operatörlerin işleme soktukları nesneler ya da sabitlerdir. a+b operatör: +, operandları: 2 tane a,b c++ operatör: ++, operandları: 1 tane c b>c operatör: >, operandları: 2 tane b,c
Yüksek Öncelik Düşük Öncelik
UYARI Operatörlerin içinde bir kısmı soldan sağa incelenir, Bir kısmı da sağdan sola incelenir.
> >= < <= soldan sağa == != soldan sağa && soldan sağa Operatörlerin hangi yönde önceliklerine bakılacağını gösteren tablo () soldan sağa ! ++ -- sağdan sola * / % soldan sağa + - soldan sağa > >= < <= soldan sağa == != soldan sağa && soldan sağa || soldan sağa = sağdan sola
Operatörler arasındaki öncelik ilişkisi c=a+b*2; ifadesi derleyici tarafından şu sırada ele alınır. işlem1: b*2; işlem2: a+işlem1; işlem3: c=işlem2;
x=a*b-2/3; işlem1: a*b; işlem2: 2/3; işlem3: işlem1 – işlem2; İşlem4: x=işlem3; Aynı önceliğe sahip olan operatörler arasında işlem sırası iki şekilde de olabilir.
a=x-b/2*c; Bölme ve çarpma operatörleri aynı önceliğe sahiptir. İ1: b/2 İ2: İ1*c İ3: x-İ2 İ4: a=İ3
C de atama operatörü sağdan sola öncelikli operatördür. a=b=c; İ1: b=c İ2: a=İ1
a=(b+2)*80; İ1: (b+2) İ2: İ1*80 İ3: a=İ2
Operatörleri 3 sınıfa sınıflandırılır İşlevlerine göre Operan sayılarına göre Operatörün konumuna göre
İşlevlerine göre operatörler Aritmetik İlişkisel Mantıksal Bit Gösterici Özel amaçlı operatörler İlk 3 tanesi diğer programlama dillerinde olabilir. Bit ve gösterici operatörleri bir çok programlama dillerinde olmazlar.
Aritmetik operatörler Dört işlemle ilgili olan; * çarpma / bölme % mod alma (bölümden kalan) + toplama - çıkartma
İlişkisel(karşılaştırma)operatörleri > büyük < küçük >= büyük yada eşit <= küçük yada eşit == eşit != eşit değil
Mantıksal operatörler ! Değil (not) && ve (and) || veya(or)
Bit operatörleri ~ değil << sola kaydırma >> sağa kaydırma & ve ^ özel veya | veya
Gösterici operatörleri * içerik alma & adres alma [ ] indeks ->
Özel amaçlı operatörler ( ) fonksiyon çağırma ve öncelik değiştirme . Yapı elemanlarına erişme (tür) tür değiştirme ?: koşul = atama +=, *=, /=,… işlemli atama
Aritmetik operatörler Aritmetik operatörler öncelik sırası ++ -- sağdan sola c=10%4+1; İ1:10%4 2 İ2:İ1+1 3 İ3:c=i2 3
Artırma(++) Eksiltme(--) ++, 1 artır -- 1 eksilt anlamındadır. ++a ile a++; ikisi de aynı anlamdadır. a=a+1; --a ile a--; ikisi de aynı anlamdadır. a=a-1;
#include<stdio.h> void main(void) { int a,b; a=10; b=++a; printf("a=%d b=%d\n",a,b); b=a++; printf("a=%d b=%d\n", a,b); } a ve b değerlerini yorumlayınız.
İlişkisel operatörler C’de ilişkisel operatörlerin ürettiği değer, koşul sağlanıyorsa 1, sağlamıyorsa 0 değerini üretir. a=5>2; /*a=1*/ b=3==3 /*b=1*/ c=4<=1 /*c=0*/
z=y<=x+10; /*z değeri nedir?*/ a=5; b=10; c=a==10<b+1; /*c değeri nedir?*/ Ödev: a=10*2+1>=4*4+5==5>5-3*2; /*a değeri nedir?*/ 1 0 1
İ1: 10*2 20 İ2: 4*4 16 İ3: 3*2 6 İ4: İ1+1 21 İ5: İ2+5 21 İ6: 5-İ3 -1 İ7: İ4>=İ5 1 İ8: 5>İ6 1 İ9: İ7==İ8 1 İ10: a=İ9 Sonuç a=1
Mantıksal operatör ! değil tek operandlı && ve iki operandlı || veya iki operandlı İlişkisel operatörlerde; koşul sağlanıyorsa 1, sağlamıyorsa 0 değerini alır. Mantıksalda ise; Sayı 0 ise YANLIŞ, sıfır değil(sıfır dışında bir sayı) ise DOĞRU değerini alır.
a=!6 /*a nin değeri nedir?*/ 6 sayısı sıfır dışı bir sayı olduğu için DOĞRU dur. Ancak “!” ile bunun tersi alınmıştır. Doğrunun tersi yanlıştır. Sonuç yanlış olacaktır.
Ödev 1 b=10+4>5+!2; /*b nin değeri nedir?*/ İ1:!2 0 İ2:10+4 14 İ4:i2>i3 1 İ5:b=i4 1 Sonuç 1 dir.
Ödev 2 a=10; b=!++a>10!=5; /*b nin değeri nedir?*/ i1: ++a 11 i2: !i1 0 i3: i2>10 0 i4: i3!=5 1 i5: b=i4 1 sonuç 1 dir.
Ve(and) - && operatörü İlişkisel operatörlerin hepsinden düşük önceliklidir. Operandların ikisi doğru ise doğru(1) değerini, operandların bir tanesi yanlış ise yanlış değerini(0) alır. a=4 && 0; /*a değeri 0 dir*/ b=10 && -4 /*b değeri 1 dir*/ c=0 && 0 /*c değeri 0 dir*/ Yani bir operand 0 ise sonuç 0 dır.
ödevler a=5; b=!a>10&&fonk()==10; /*b nin değeri nedir?*/ a=15; x=a>=10&&a<=20; /*x nin değeri nedir?*/