+16 votes
793 views

The expression $( a * b) * c \; op \dots$

where ‘op’ is one of ‘$+$’, ‘$*$’ and ‘$\uparrow$’ (exponentiation) can be evaluated on a CPU with single register without  storing the value of ($a * b$) if

1. $\text{‘op’}$ is ‘$+$’ or ‘$*$’

2. $\text{‘op’}$ is ‘$\uparrow$’ or ‘$*$’

3. $\text{‘op’}$ is ‘$\uparrow$’ or ‘$+$’

4. not possible to evaluate without storing

asked
edited | 793 views

## 2 Answers

+19 votes
Best answer

A)

$\uparrow$ has higer precedence than $\{*,+,-,/ \}$

So, if op $= \uparrow$ implies, we need to evaluate the right hand side of $\uparrow$ first and then do the lhs part, which would definitely require us to store the value of lhs

but if its a '$+$' or '$*$' , we don't need to store the values evaluated, and on the go can do the operation directly on one register.

answered by Junior (917 points)
edited by
0
why will we evaluate RHS of ↑ first, coz in C language, either side of a binary operator can be evaluated first, it is undefined!
+5 votes
Let say, the expression is one of the below:

(a*b)*c+d

(a*b)*c*d

(a*b)*c^d

In any case, brackets has the highest priority always. So I have to compute brackets first. Now, for + and *, I can do the rest of the operation and save results in the same register. But for exponentiation, I have to store the result of a*b, then do the computation of c^d, then multiply these two results.

So option A is correct.
answered by (193 points)
Answer:

+29 votes
7 answers
1
+12 votes
1 answer
2
+13 votes
1 answer
3
+13 votes
1 answer
4
+12 votes
2 answers
5
+24 votes
3 answers
6
+14 votes
3 answers
7