Mobil Programlama

iOS

DERS PROGRAMI
iOS 201 Ders Programı

Tekli Operatörler

Lisans: Creative Commons 11.12.2020 tarihinde güncellendi
Bakabileceğiniz Etiketler: Eğitmen: Geleceği Yazanlar Ekibi

 

Önceki bölümlerde incelediğimiz üzere operatörler cast operatörü, sizeof, adresini elde etme (&), adresi verilen veriye erişme (*), negatifini alma (), pozitifini alma (+), bit düzeyinde tamamlayıcısını elde etme (), lojik olarak karşıtını alma (!), artım (++) ve azaltım (––) operatörleridir.

Bu başlık altında bunlardan negatifini alma (), pozitifini alma (+), artım (++) ve azaltım (––) operatörlerini inceleyeceğiz.

Negatifini alma operatörü () tek bir operand üzerinde etkili olduğu için, iki operand ile işleme giren () sembolü ile karıştırılmamalıdır.

 

ÖRNEK:

 

#import <Foundation/Foundation.h>
 
int main(int argc, char* argv[])
{
    NSAutoreleasePool *pool=[[NSAutoreleasePool alloc] init];
 
    int x,y = -5;
    x=16- -y;
    NSLog(@"\nx=%i\n\n",x);
    [pool drain];
    return 0;
}

 

 

Bu programda x’in değeri 11 olarak bulunacaktır. –y, (5)=+5 olarak hesaplanır. 16’yı izleyen çıkarma operatörü () ile y’nin önündeki negatifini alma () operatörü arasında mutlaka bir boşluk olmalıdır. Aksi halde ifadesi azaltım operatörü olarak algılanacaktır.

Operatör

     Sembolü

     Kullanılışı

        İşlem Sonucu

Tekli negatif alma

 

a

a’nın negatifini alır

Son artım

   ++

   a++

Önce a’nın değerini al, kullan, sonra 1 artır.

Ön artım

   ++

   ++a

Önce a’nın değerini 1 artır, sonra kullan.

Son azaltım

  ––

   a––

Önce a’nın değerini al, kullan, sonra 1 azalt.

Ön azaltım

  ––

––a

Önce a’nın değerini 1 azalt, sonra kullan.

 

Son artım ve son azaltım operatörlerinde derleyici, değişkenin o andaki değerini bellekte geçici bir değişkene atayarak saklar. Sonra değişkenin değerini 1 artırır (son artım) veya 1 azaltır (son azaltım). Geçici değişkendeki değer ise, ifade içinde kullanılır.

 

ÖRNEK:

 

#import <Foundation/Foundation.h>
 
int main(int argc, char* argv[])
{
    NSAutoreleasePool *pool=[[NSAutoreleasePool alloc] init];
 
    int x=4, y=8, z;
    z= x++ + y--;
    NSLog(@"\nz= %i ..\n",z);
    NSLog(@"\nx= %i ..\n",x);
    NSLog(@"\ny= %i..\n",y);
    [pool drain];
    return 0;
}

 

 

PROGRAMIN ÇIKTISI:

z=12

x=5

y=7

 

Önce x ve y’nin o andaki değerleri geçici bellek alanlarına atanmış (4 ve 8), bu değerlerle ifade hesaplanmış (z=12) sonra x’in değeri 1 arttırılmış ve y’nin değeri 1 azaltılmıştır.

Ifadeyi z= x+++y–– ; şeklinde boşluksuz yazsak da sonuç değişmezdi. Derleyici bu durumda +++’nın mevcut operatörler içinde mümkün olan en uzununu (++) alır ve ifadeyi şu şekilde yorumlardı:

z=(x++) + y–– ;

Aynı ifadeyi z=x+++ veya y--- şeklinde yazsak da aynı sonucu elde ederdik.

Ön artım ve ön azaltım operatörleri kullanıldığında ise, önce artım (mevcut değere 1 ekleme) veya azaltım (mevcut değerden 1 çıkarma) gerçekleştirilir, sonra ifade hesaplanır.

 

ÖRNEK:

 

#import <Foundation/Foundation.h>
 
int main(int argc, char* argv[])
{
    NSAutoreleasePool *pool=[[NSAutoreleasePool alloc] init];
 
    int x,y,z,m;
    x=10;
    y=5;
    z=16;
    m= ++x - --y + z++;
    NSLog(@"\nx = .. %i \n",x);
    NSLog(@"\ny = .. %i \n",y);
    NSLog(@"\nz = .. %i \n",z);
    NSLog(@"\nm = .. %i \n",m);
    [pool drain];
    return 0;
}

 

 

PROGRAMIN ÇIKTISI:

 

Bu programda m ifadesini

m= ++x–––y + z++ ;

şeklinde yazmış olsaydık, derleyici tarafından (kullanılan derleyiciye göre);

Lvalue required in function main ()

veya,

error C2105: '++' needs lvalue

hata mesajını alırdık. Bunun anlamı şudur: İfade; m=++x–– y + z++ şeklinde yorumlanmış. ++x–– ifadesi ise sağdan sola birleşim özelliğine sahip olduğu için (bkz.öncelikler ve birleşimler tablosu) ++(x––) şeklinde yorumlanır. x–– işleminin nasıl yapılacağını hatırlayalım. Önce x’in bir kopyası geçici bir bellek alanına yerleştirilir. Sonra değeri 1 azaltılır. Geçici bellek alanına yüklenen değer için ++ operatörü geçersizdir. Çünkü ++ ve –– operatörleri sadece sürekli saklanan değişkenler (left hand value, Lvalue, = sembolünün solundaki değişken) için geçerli olduğundan bu hata mesajı alınmıştır.

 

Aşağıdaki programda ise artım ve azaltım operatörlerinin değişik kullanım biçimleri örneklenmiştir:

 

#import <Foundation/Foundation.h>
 
int main(int argc, char* argv[])
{
    NSAutoreleasePool *pool=[[NSAutoreleasePool alloc] init];
 
    int m,n,p,q;
    m=4; n=2; p=10; q=8;
    m= -m++ ;
    n= n-- ;
    p= --p ;
    q= -++q ;
    NSLog(@"\nm = %i \n",m);
    NSLog(@"\nn = %i \n",n);
    NSLog(@"\np = %i \n",p);
    NSLog(@"\nq = %i \n",q);
    [pool drain];
    return 0;
}

 

 

SONUÇ: