C++ İle İlgili Ufak Bir Soru.
-
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 ^^ -
Dur bi sn bakayım.
Not:Neden öyle anlamadım. Üstekkini açıklasam alttakini açıklayamıyorum. Operatör önceliklerinede baktım anlamadım.
-
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 :/
-
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?
-
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 :))
-
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 ?
-
++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
-
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.
-
@
Quarantine Doğru diyorsun kafam bildiğin kafan ben karıştırmışım -
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.
-
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:)