C- "jednoduchá aritmetická operace"
Dobrý den
Při programování jsem narazil na kód:
int a = 5;
int b = 3;
int c = a++ + --b + ++a - ++b;
Chtěl bych se zeptat, jak bych měl postupovat, když bych to měl řešit na papíře?
Děkuji
Dobrý den
Při programování jsem narazil na kód:
int a = 5;
int b = 3;
int c = a++ + --b + ++a - ++b;
Chtěl bych se zeptat, jak bych měl postupovat, když bych to měl řešit na papíře?
Děkuji
Zpět do poradny Odpovědět na původní otázku Nahoru
s C sice nedělám ale předpokládám že to bude asi takhle
A=5
B=3
jasne
a++ je k A přičti 1 (hodnota v pameti A je stejná)
--b je nejdriv odecti od B 1 (hodnota v pameti B je snizena o jednicku)
a=5 b=2 a=6 b=3
c=(a+1) + (b) + (a) - (b)
tedy c=(5+1)+(2)+(6)-(3)
c=11
Edit: int znamená deklarace
Díky moc, nebyl jsem si jist tím výpočtem C
ked si ten kod pustis, tak zistis, ze vysledok je 10 :)
preco to tak je, sa mi zistovat nechce :)
Jsem si to pustil a vyšlo mi tohle:
Nějak se nemohu dopočítat. Z hlavy mi leze také 11, tak proč v tom prvním je 12? Netuší někdo?
tedy c=(5+1)+(2)+(6)-(4)
c=10
Už to souhlasí i s poslední příspěvkem.
nemas to dobre. .. na konci je -3.
len nechapem, preco pri ++a sa to neinterpretuje ako 7 ... co by malo. takze by to malo byt 5+2+7-3=11
Neznám C, ale něco takového by snad mělo být stejné. Chápu to stejně jako "Eraser".
int a = 5;
int b = 3;
int c = a++ + --b + ++a - ++b;
a++ = 5 + 1 = 6
--b = 3 - 1 = 2
++a = 5 + 1 = 6
++b = 3 + 1 = 4
int c = (5+1 )+ 2 + 6 - 4 = 10
Viz: http://www.linuxquestions.org/questions/programmin g-9/difference-between-a-and-a-in-java-398131/
int d = 4;
int c = 4;
int x = 0;
x = d++ - c;
cout << x;
Proč teda v tomto případě je výsledek 0? Když podle vás by na začátku mělo být
(4 + 1) - 4?
Není to tak, tady je to normálně 4-4.
int d = 4;
int c = 4;
int x = 0;
x = d++ - c;
cout << x << "/" << d;
vypis bude 0/5 :) problem officer?
Protože 4 - 4 je nula. D = 5 by bylo až při další operaci s D. Teda, alespoň podle toho co znám
nechapes to rovnako ako eraser.
Na zaciatku sa vykonava a++ + --b
to znamena, ze sa scita "a" teda 5 s hodnotou b-1 teda 2 vysledkom je 7 ale hodnota "a" sa zvysi na 6.
potom ide k hodnote 7 pricitanie ++a (co by podla mna malo byt uz 7 ... lebo a uz ma hodnotu 6) a teda medzivysledok by mal byt 14. nakoniec sa odpocita ++b co je vlastne b+1 a teda 3 (lebo medzitym sa hodnota zmenila na 2). 14-3 je potom 11. A tak to pochopil aj eraser.
ale neviem, mozno som z toho uz aj ja uplne mimo.
Ne ne, máte pravdu.
Ted jsem si napsal, a vychází to Vaše.
Omlouvám se za zmatečnost, díky.
Jinak Visual Studio hodí výsledek 12. To je teda paráda.
asi zalezi na kompilatore :) neviem ... pouzivam gcc a g++
int a = 4;
printf("a=%d\n", ++a);
printf("a=%d\n", a++);
printf("a=%d\n", a);
4
4
5
a++ je postincrement - nejdriv se hodnota pouzije a pak se zvetsi.
++a je preincrement - hodnota je nejdriv zvetsi a pak pouzije
tj
5+2+7-3=11
a mam to blbe
ma tam bejt jenom +6, ne 7, protoze to pricteni 1 se provede az po. Takze deset. Kdyby to ale bylo na dvou radkach, bylo by to 11.
no, takze mame jasno preco to vychadza 10 :D cize a++ (inkrementacia sa spravi az po dokonceni celeho priradenia) ... ale preco to vo visual studiu vychadza 12?
V první řadě, bych jemně proplesknul toho, co to napsal...
Toto je asi najlepšia odpoveď, pretože výsledná hodnota je nedefinovaná a závisí od konkrétneho prekladača.
to je jak curat proti vetru a tvarit sa pri tom hrozne vedecky.