folder Tahribat.com Forumları
linefolder C - C++
linefolder C++ İle İlgili Ufak Bir Soru.



C++ İle İlgili Ufak Bir Soru.

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    unix
    Andrei
    Andrei's avatar
    Banlanmış Üye
    Kayıt Tarihi: 11/Aralık/2008
    Erkek

    int x=6; 

    x=x-((x-(--x)-(++x)));

    cout << x << endl;

     
    bu kodu tek tek acıklayabilecek birisi var mıdır ?
     
    artırma - azaltma operatörleriyle biraz fantezi yapalım dedik ama bildiklerimizi de karıstırdık.
     
    önden artırmalı ve azaltmalı iki deger yanyana gelince nasıl isleme giriyor bunlar ?
     
     
    mesela :
     
    int x=6; 
     
    x=(--x)-(++x);
     
    cout << x << endl;
     
    bunun sonucu neden 0 ?
     
     
    ilk soruyu birisi detaylıca anlatırsa bundan sonra sorun cıkacagını sanmıyorum ^^

    %40 indirimli olarak "Centos Sistem ve Sunucu Yönetimi" adlı kitabımızı satın alarak, Linux üzerine yapılacak olan devam projeleri icin destekte bulunabilirsiniz : http://www.hepsiburada.com/centos-sistem-ve-sunucu-yonetimi-oku-izle-dinle-ogren-p-KKODLAB01579
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    DrKill
    DrKill's avatar
    Kayıt Tarihi: 10/Mart/2004
    Erkek

    Dur bi sn bakayım.

     

     

    Not:Neden öyle anlamadım. Üstekkini açıklasam alttakini açıklayamıyorum. Operatör önceliklerinede baktım anlamadım.


    Bu imzayı her gördüğünüzde 4gb kotanızın 0,00000358559191226959228515625 azalmaktadır. Bilerek ve istenerek bu imza yapılmıştır. Amaç kotanızı sömürmektir
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    unix
    Andrei
    Andrei's avatar
    Banlanmış Üye
    Kayıt Tarihi: 11/Aralık/2008
    Erkek

    cevap 12 abi.

    alttakinin cevabı da 0.

     

    acaba söyle mi :

    operatör önde olursa önce soldakini hesaplayıp isleme dagıtıyoruz, yani x-(--x) bu ifade 5 -5 = 0 oluyor.

    ++x'teki x'in ifadesi de 5 oldugunu düsünürsek, ++'dan degeri 1 artırıldı, yani 0 - 6 = -6 oldu.

    oradaki ++'dan dolayı parantez dısındaki x'de 6 olduysa;

    6 - (-6) = 12.

     

    dogru mu ki dedigim :/


    %40 indirimli olarak "Centos Sistem ve Sunucu Yönetimi" adlı kitabımızı satın alarak, Linux üzerine yapılacak olan devam projeleri icin destekte bulunabilirsiniz : http://www.hepsiburada.com/centos-sistem-ve-sunucu-yonetimi-oku-izle-dinle-ogren-p-KKODLAB01579
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    renegadealien
    renegadealien's avatar
    Üstün Hizmet Madalyası Savaş Madalyası Başarı Madalyası Üstün Hizmet Madalyası Developer Madalyası
    Kayıt Tarihi: 23/Mart/2003
    Erkek

    x=x-((x-(--x)-(++x)));

    (--x)-(++x)

    5-7 = -2

    6--2 = 8

    6-8 = -2 olması lazım matematiksel olarak diye düşünüyorum, ama bu kadar iç içe döngüde karıştırıyor olabilirim

    (x-(--x)-(++x)) bunda değer nedir geri dönen?


    Sanıyorum kendi atasözümü yaptım, kaynak belirterek kullanabilirsiniz. 10.05.2013 tarihli google arama sonucu : Aradığınız - "herşeyin hayırlısı rampanın bayırlısı" - ile ilgili hiçbir arama sonucu mevcut değil. Not : Söyleyeni belli olduğu için(Ben) atasözü değil, özlüsöz oluyormuş, dolayısı ile kendi özlüsözümü yapmış oldum :)
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Bosluk
    Bosluk's avatar
    Kayıt Tarihi: 11/Kasım/2007
    Erkek

    renegadealien bunu yazdı:
    -----------------------------

    x=x-((x-(--x)-(++x)));

    (--x)-(++x)

    5-7 = -2

    6--2 = 8

    6-8 = -2 olması lazım matematiksel olarak diye düşünüyorum, ama bu kadar iç içe döngüde karıştırıyor olabilirim

    (x-(--x)-(++x)) bunda değer nedir geri dönen?


    -----------------------------

    cevap 12

     

    burasıda böyle gelmıo

    (--x)-(++x)

    5-7 = -2

     

    bu =0 oluo

     

    Buna Şeyh'in bakması lazım :))

     


    ____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    unix
    Andrei
    Andrei's avatar
    Banlanmış Üye
    Kayıt Tarihi: 11/Aralık/2008
    Erkek

    renegadealien bunu yazdı:
    -----------------------------

    x=x-((x-(--x)-(++x)));

    (--x)-(++x)

    5-7 = -2

    6--2 = 8

    6-8 = -2 olması lazım matematiksel olarak diye düşünüyorum, ama bu kadar iç içe döngüde karıştırıyor olabilirim

    (x-(--x)-(++x)) bunda değer nedir geri dönen?


    -----------------------------

    -6 abi.

    o zaman benim dedigim gibi cıkıyor olay ?


    %40 indirimli olarak "Centos Sistem ve Sunucu Yönetimi" adlı kitabımızı satın alarak, Linux üzerine yapılacak olan devam projeleri icin destekte bulunabilirsiniz : http://www.hepsiburada.com/centos-sistem-ve-sunucu-yonetimi-oku-izle-dinle-ogren-p-KKODLAB01579
  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    All hail to Tux
    sandman
    sandman's avatar
    Kayıt Tarihi: 01/Eylül/2005
    Erkek

    ++x ila x++ operatorleri arasında şöyle bir fark vardır eğer işlem(+,-) önce olursa sayının değerini bir sonraki satırda artırır yani o esnada işleme sokmaz.

    Şimdi senin yazdıgın koda ++'ların yada --'lerin olması aslında bir etkide bulunmuyor çünkü x-(--x)-(++x) satırında ilk x ile --x birbirini sıfırlıyor ve ++x'in başında eksi oldugu için otomatik olarak elimizde -x kalıyor aynı satırda işleme devam ettigimiz için hala x'lerin değeri modifiye edilmedigine dikkat çekerim. daha sonra parantezlerin başında - oldugu için klasik matematikten iki -'i + oluyor oluyor ve asıl işlem x+x'e dönüyor


    Mühendis kahveyi projeye dönüştüren bir insan evladıdır.
  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Quarantine
    Quarantine's avatar
    Kayıt Tarihi: 07/Aralık/2007
    Erkek

    sandman bunu yazdı:
    -----------------------------

    ++x ila x++ operatorleri arasında şöyle bir fark vardır eğer işlem(+,-) önce olursa sayının değerini bir sonraki satırda artırır yani o esnada işleme sokmaz.

    Şimdi senin yazdıgın koda ++'ların yada --'lerin olması aslında bir etkide bulunmuyor çünkü x-(--x)-(++x) satırında ilk x ile --x birbirini sıfırlıyor ve ++x'in başında eksi oldugu için otomatik olarak elimizde -x kalıyor aynı satırda işleme devam ettigimiz için hala x'lerin değeri modifiye edilmedigine dikkat çekerim. daha sonra parantezlerin başında - oldugu için klasik matematikten iki -'i + oluyor oluyor ve asıl işlem x+x'e dönüyor


    -----------------------------
    Öncelikle durum sizin belirttiğinizin tam tersi hocam. Önce ikili operatör varsa önce bu operatörlerin belirttiği işlem yapılır.

    x=(--x)-(++x);

    işlemini adım adım hangi işlemlerin yapıldığını anlatarak açıklamaya çalışayım:

    1: --x  işlemi yapılarak x'in değeri 5'e indirilir.

    2: ardından x++ işlemi ile x tekrar 6'ya yükseltilir.

    3: son olarak x'in son değeri yani 6 için x-x yani 6-6 işlemi yapılır ve sonuç sıfır olarak bulunur, x'e atanır.

    Not: 1. ve 2. adımın sırası derleyicinin bu işlemi nasıl ele aldığına göre değişebilir ama sonuç değişmez.

     

    Buradan ilk sorunun çözümünü çıkarabilirsiniz diye açıklamaya gerek görmedim ama talep olursa onu da anlatabilirim:)

    Hadi kolay gele.


    ...........................
  9. KısayolKısayol reportŞikayet pmÖzel Mesaj
    All hail to Tux
    sandman
    sandman's avatar
    Kayıt Tarihi: 01/Eylül/2005
    Erkek

    @Quarantine 

    Doğru diyorsun kafam bildiğin kafan ben karıştırmışım


    Mühendis kahveyi projeye dönüştüren bir insan evladıdır.
  10. KısayolKısayol reportŞikayet pmÖzel Mesaj
    unix
    Andrei
    Andrei's avatar
    Banlanmış Üye
    Kayıt Tarihi: 11/Aralık/2008
    Erkek

    Quarantine bunu yazdı:
    -----------------------------

    sandman bunu yazdı:
    -----------------------------

    ++x ila x++ operatorleri arasında şöyle bir fark vardır eğer işlem(+,-) önce olursa sayının değerini bir sonraki satırda artırır yani o esnada işleme sokmaz.

    Şimdi senin yazdıgın koda ++'ların yada --'lerin olması aslında bir etkide bulunmuyor çünkü x-(--x)-(++x) satırında ilk x ile --x birbirini sıfırlıyor ve ++x'in başında eksi oldugu için otomatik olarak elimizde -x kalıyor aynı satırda işleme devam ettigimiz için hala x'lerin değeri modifiye edilmedigine dikkat çekerim. daha sonra parantezlerin başında - oldugu için klasik matematikten iki -'i + oluyor oluyor ve asıl işlem x+x'e dönüyor


    -----------------------------
    Öncelikle durum sizin belirttiğinizin tam tersi hocam. Önce ikili operatör varsa önce bu operatörlerin belirttiği işlem yapılır.

    x=(--x)-(++x);

    işlemini adım adım hangi işlemlerin yapıldığını anlatarak açıklamaya çalışayım:

    1: --x  işlemi yapılarak x'in değeri 5'e indirilir.

    2: ardından x++ işlemi ile x tekrar 6'ya yükseltilir.

    3: son olarak x'in son değeri yani 6 için x-x yani 6-6 işlemi yapılır ve sonuç sıfır olarak bulunur, x'e atanır.

    Not: 1. ve 2. adımın sırası derleyicinin bu işlemi nasıl ele aldığına göre değişebilir ama sonuç değişmez.

     

    Buradan ilk sorunun çözümünü çıkarabilirsiniz diye açıklamaya gerek görmedim ama talep olursa onu da anlatabilirim:)

    Hadi kolay gele.


    -----------------------------

    tesekkür ederim.

    sandman'in anlattıgını anladım da ilk soru icin, benim dedigim de dogru degil mi ?

    x=x-((x-(--x)-(++x)));

    x-(--x) burada --x önce 5 oluyor ve solundaki x'i de 5'e esitliyor. 5 - 5 = 0 oluyor.

    ++x'teki x'de 5'e düsüyor ama önünde ++ oldugundan tekrar 6 oluyor. tabii bu sırada aynı artma - azaltma islemleri parantez dısındaki x icin de gecerli oluyor.

    0 - (++x) = 0 - 6 = -6.

    parantez dısındaki x'te 6, 6 - (-6) = 12.

    ben böyle cözdüm, sizin anlattıgınız yöntem de benim dedigimi dogruluyor sanırım.


    %40 indirimli olarak "Centos Sistem ve Sunucu Yönetimi" adlı kitabımızı satın alarak, Linux üzerine yapılacak olan devam projeleri icin destekte bulunabilirsiniz : http://www.hepsiburada.com/centos-sistem-ve-sunucu-yonetimi-oku-izle-dinle-ogren-p-KKODLAB01579
  11. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Quarantine
    Quarantine's avatar
    Kayıt Tarihi: 07/Aralık/2007
    Erkek

    Andrei bunu yazdı:
    -----------------------------

    Quarantine bunu yazdı:
    -----------------------------

    sandman bunu yazdı:
    -----------------------------

    ++x ila x++ operatorleri arasında şöyle bir fark vardır eğer işlem(+,-) önce olursa sayının değerini bir sonraki satırda artırır yani o esnada işleme sokmaz.

    Şimdi senin yazdıgın koda ++'ların yada --'lerin olması aslında bir etkide bulunmuyor çünkü x-(--x)-(++x) satırında ilk x ile --x birbirini sıfırlıyor ve ++x'in başında eksi oldugu için otomatik olarak elimizde -x kalıyor aynı satırda işleme devam ettigimiz için hala x'lerin değeri modifiye edilmedigine dikkat çekerim. daha sonra parantezlerin başında - oldugu için klasik matematikten iki -'i + oluyor oluyor ve asıl işlem x+x'e dönüyor


    -----------------------------
    Öncelikle durum sizin belirttiğinizin tam tersi hocam. Önce ikili operatör varsa önce bu operatörlerin belirttiği işlem yapılır.

    x=(--x)-(++x);

    işlemini adım adım hangi işlemlerin yapıldığını anlatarak açıklamaya çalışayım:

    1: --x  işlemi yapılarak x'in değeri 5'e indirilir.

    2: ardından x++ işlemi ile x tekrar 6'ya yükseltilir.

    3: son olarak x'in son değeri yani 6 için x-x yani 6-6 işlemi yapılır ve sonuç sıfır olarak bulunur, x'e atanır.

    Not: 1. ve 2. adımın sırası derleyicinin bu işlemi nasıl ele aldığına göre değişebilir ama sonuç değişmez.

     

    Buradan ilk sorunun çözümünü çıkarabilirsiniz diye açıklamaya gerek görmedim ama talep olursa onu da anlatabilirim:)

    Hadi kolay gele.


    -----------------------------

    tesekkür ederim.

    sandman'in anlattıgını anladım da ilk soru icin, benim dedigim de dogru degil mi ?

    x=x-((x-(--x)-(++x)));

    x-(--x) burada --x önce 5 oluyor ve solundaki x'i de 5'e esitliyor. 5 - 5 = 0 oluyor.

    ++x'teki x'de 5'e düsüyor ama önünde ++ oldugundan tekrar 6 oluyor. tabii bu sırada aynı artma - azaltma islemleri parantez dısındaki x icin de gecerli oluyor.

    0 - (++x) = 0 - 6 = -6.

    parantez dısındaki x'te 6, 6 - (-6) = 12.

    ben böyle cözdüm, sizin anlattıgınız yöntem de benim dedigimi dogruluyor sanırım.


    -----------------------------

    Rica ederim hocam, önemli değil.

    Yalnız sanırım biraz daha açmam gerekiyor konuyu.

    x-(--x)-(++x)  işlemini ele alırsak:

    bu satırda --x ve ++x  işlemleri birbirlerine göre eşit öncelikte,  x-(...)-(...) işlemi ise daha düşük bir önceliğe sahip.

    Bu yüzden burada öncelikle x'ten bir çıkarılıp bir artırılır ve x'in değeri tekrar 6 olur.

    Son olarak  6-(6)-(6)  işlemini yapıyor olacağız ki burada sonuç -6 çıkmış olacak.

    Bu kadarını anladıktan sonra zaten:

    x=x-((x-(--x)-(++x)));  işleminin  x=6-(-6); yani x=12  ile sonuçlanacağını görebiliriz.


    Sonucu doğru bulmuşsun ama işlem önceliğinde biraz sorun var gibi:)



    ...........................
Toplam Hit: 1935 Toplam Mesaj: 20