Pomoc w zrozumieniu zapisu

0

int x=1,a=1,b=1;
++x=(a!=0)?(a+bx):(b++);
Kto mi wytłumaczy krok po kroku jak obliczyć x. Wiem już że trzeba obliczyć (a+b*x) ale nie wiem dlaczego wychodzi mi 6 (tzn. nie mi, a kompilatorowi xD)

1
int x=1,a=1,b=1;
 ++x*=(a!=0)?(a+b*x):(b++);

Dalej:

if (a != 0)
 ++x *= a+b*x; else
 ++x *= b++;

Dalej (tutaj już x = 2, z powodu inkrementacji ++x):

x *= 1+1*x;
x = x*(1+2);
x = 2*(1+2);
x = 6
1

x = 1
x = x + 1 (preinkrementacja)
x = 2
x = x (a + b x)
x = 2 (1 + 1 2)
x = 2 * 3
x = 6

0

A taki przykład:
int a,i=2,j=4;
a=i +++j;

Mino że są +++ to wykonuje operacje jako zwykłe dodawanie. Dlaczego?

0

Mino że są +++ to wykonuje operacje jako zwykłe dodawanie.

+++ traktowane jest jak 3 operacje dodawania - + + +
Musiałbyś zapisać to jako:
i+ ++j, aby zrobić dodawanie oraz inkrementację zmiennej.

4

@Patryk27, mylisz się.

i +++j zgodnie z regułą "maximal munch" do i zostanie dopasowana jak największa, możliwa ilość plusów. Jako, że operator postinkrementacji ma dwa plusy, a dodawania tylko jeden - zostanie wybrana ta pierwsza opcja. Jest to więc (i++) + j.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0