GeeCON Prague 2014*
The moose likes Programmer Certification (SCJP/OCPJP) and the fly likes operator precedence Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


JavaRanch » Java Forums » Certification » Programmer Certification (SCJP/OCPJP)
Bookmark "operator precedence" Watch "operator precedence" New topic
Author

operator precedence

cyril vidal
Ranch Hand

Joined: Jul 02, 2003
Posts: 247
Hi,
I would have a question about operator's precedence.
Here's an example extracted from Dan's mock exam:

Answer: Prints: 1, 2, 3, 4, 9,
I understand the order of four digits 1, 2, 3, 4 which indicates that, as said in a precedent topic in Javaranch about operator, the order of operations has nothing to do with operators precedence, which tells about place of parenthesis.
However, I don't understand the last digit, 9.
For me, I thought that * had the highest precedence compared to %
so
m(1) + m(2) % m(3) * m(4)
is equivalent for me to
m(1) + (m(2) % (m(3) * m(4)))
and I would wait 1 + (2%12) = 1 + 2 = 3 as output.
Instead, as far as I understand the result,
m(1) + m(2) % m(3) * m(4)
is equivalent to
m(1) + ((m(2) % (m(3)) * m(4)) which gives
1 + (2 *4) =9 as output.
Am I wrong in saying that * has higher priority than %, and is it more correct to say that they have the same precedence, and hence, are evaluated left to right, so % before *?
I'm sure i'm missing something here, but I don't see what exactly.
I would be very grateful for any assistance,
Thanks in advance for your help,
Cyril.


SCJP 1.4, SCWCD, SCBCD, IBM XML, IBM Websphere 285, IBM Websphere 287
Marlene Miller
Ranch Hand

Joined: Mar 05, 2003
Posts: 1391
The 3 operators * / % all have the same precedence
Damien Howard
Ranch Hand

Joined: Apr 01, 2003
Posts: 456
Try this website http://java.sun.com/docs/books/tutorial/java/nutsandbolts/expressions.html for operator precedence.
It is a little tricky though because in some cases it seems precedence has to do with () placement not actual evaluation precedence. Marlene explained it in some earlier posts. Do a search on some of the recent posts and you should be able to find it.
Damien Howard
Ranch Hand

Joined: Apr 01, 2003
Posts: 456
This link might ne of help http://www.coderanch.com/t/242411/java-programmer-SCJP/certification/Dan-exam and it also contains a link to Marlene's explanation I was mentioning in my previous post.
cyril vidal
Ranch Hand

Joined: Jul 02, 2003
Posts: 247
OK. Thanks all for your answers and links.
Here the key is that the 3 operators * / % all have the same precedence.
This was not well explained in my book Complete Java 2 certification Study Guide.
P.32 we can read:
Unary: ...
Arithmetic * / %
+ -
...
...
Bitwise & ^|
So * / % and & ^| are presented exactly in the same form, and I've wrongly deduced from this that * had precedence on / % exactly as & had precedence on ^ and |.
Cyril.
Marlene Miller
Ranch Hand

Joined: Mar 05, 2003
Posts: 1391
Here is the scoop on precedence:
postfix operators expr++ expr--
unary operators ++expr --expr +expr ~ !
cast (type)expr
multiplicative * / %
additive + -
shift << >> >>>
relational < > >= <= instanceof
equality == !=
AND &
exclusive OR ^
inclusive OR |
conditional AND &&
conditional OR ||
conditional ?:
assignment = op=
I am not sure whether cast has lower precedence than the other unary operators. My two reliable sources (JLS, JPL) seem to disagree. I cannot think of a way to test it.
Operator precedence is the "stickiness" of operators relative to each other. Precedence tells you how to add parentheses.
[ July 13, 2003: Message edited by: Marlene Miller ]
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: operator precedence