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:)