Big Moose Saloon
 Search | Java FAQ | Recent Topics Register / Login

# Operator precedence

meena latha
Ranch Hand

Joined: Jan 24, 2005
Posts: 219
public class Question48{
public static void main(String[] args) {
int i = 4*6-3/2<<2*5>>>1%2-4^3;
System.out.println(i);
}
}

Nicholas Cheung
Ranch Hand

Joined: Nov 07, 2003
Posts: 4982

It is easy that you put it to the compiler and you can get the result!

Nick

SCJP 1.2, OCP 9i DBA, SCWCD 1.3, SCJP 1.4 (SAI), SCJD 1.4, SCWCD 1.4 (Beta), ICED (IBM 287, IBM 484, IBM 486), SCMAD 1.0 (Beta), SCBCD 1.3, ICSD (IBM 288), ICDBA (IBM 700, IBM 701), SCDJWS, ICSD (IBM 348), OCP 10g DBA (Beta), SCJP 5.0 (Beta), SCJA 1.0 (Beta), MCP(70-270), SCBCD 5.0 (Beta), SCJP 6.0, SCEA for JEE5 (in progress)
meena latha
Ranch Hand

Joined: Jan 24, 2005
Posts: 219
cheung my question is how do v evaluate the expression.
When i compiled the answer is 3 but how to arrive the answer.
komanduru saritha
Greenhorn

Joined: Jan 24, 2005
Posts: 1
Ramya
Here is the reply for the question you posted

int k = (((4*6)-3)/2)<<((2*5))>>>((1%2)-4)^3;
Rajasekar Elango
Ranch Hand

Joined: Sep 13, 2004
Posts: 105
Hi,

Thanks,
Raja

SCJP 1.4
Murali Atmakuri
Greenhorn

Joined: Dec 13, 2004
Posts: 4
Ramya ,
The evaluation order goes this way
(((4*6)-(3/2))<<(2*5)>>>((1%2)-4))^3
One point to remember is that the result of shift operator is always zero if the shift distance is negative

JCP 1.4 ,SCWCD (Preparing)
osman cinar eren
Ranch Hand

Joined: Jan 25, 2005
Posts: 78
"One point to remember is that the result of shift operator is always zero if the shift distance is negative "

this statement is actually wrong. try with Integer.MIN_VALUE(which is equal to the shift with 0), Integer.MIN_VALUE+1 (which is equal to shift with 1) ....

SCJP/SCWCD
meena latha
Ranch Hand

Joined: Jan 24, 2005
Posts: 219
can anybody help me further

1.4*6=24
24-(3/2)=23

2.2*5=10

3.((1%2)-4)=-3

(23<<(10>>>-3))^3

i am correct until this.......
If so how do i proceed further.
osman cinar eren
Ranch Hand

Joined: Jan 25, 2005
Posts: 78
(23<<(10>>>-3))^3
actually the shift operand on the left should be MOD 32.
(so my writing above for the min value is incomplete)then;

-3--> -3+32=29
10>>>29=0

23<<0=23

23^3;

23=10111
3 =00011

23^3=10100=20
Bert Bates
author
Sheriff

Joined: Oct 14, 2002
Posts: 8752

4
Attention, Attention...

This is the "Focus Police" !

This is all very interesting, but just for the sake of those of you who are studying for either the SCJP 1.4 or the new Tiger cert...

RELAX !

This is NOT on the exam! I know it's on a lot of the mock exams you can find, but it's NOT on the real exam...

HTH

Spot false dilemmas now, ask me how!
(If you're not on the edge, you're taking up too much room.)
osman cinar eren
Ranch Hand

Joined: Jan 25, 2005
Posts: 78
Do you mean the operator precedence is not worth studying as it is not in the exam?

we should not work on those table that show the operator precedence?

or is it just the negative right hand operator?
meena latha
Ranch Hand

Joined: Jan 24, 2005
Posts: 219
but the output is 3 when u compile this program.
osman cinar eren
Ranch Hand

Joined: Jan 25, 2005
Posts: 78
i have recently checked it; it is 20.
Bert Bates
author
Sheriff

Joined: Oct 14, 2002
Posts: 8752

4
What I'm saying is that complex operator precedence is NOT on either exam... some simple stuff might be (like the precedence of casting), but none of this complicated spaghetti code stuff you see on the mocks...

I'm not saying don't study it, (I wouldn't, but you can ), I'm just saying it's not on the exam
Joe Borderi
Ranch Hand

Joined: Oct 23, 2004
Posts: 151
"[On precedence of bit operations: ] I know it's on a lot of the mock exams you can find, but it's NOT on the real exam..."

I was glad that the SCJP did not test this. If the SCJP tested this, the test would become much more of test of trivia than test of practical experience.

As a practical matter, practicing programmers normally know the precedence table in its broad scope. For example, we know that . (the dot operator) binds tighter than the logical operators, which bind tighter than arithmetic operators, which in turn bind tighter than the assignment operators.

I had a program manager who used to say "multiplication and division before addition and subtraction, and everything else goes in parenthesis."

I think he was being partly facetious. Professional programmers would find annoying reading code that put in parens operators that are commonly used and several tiers of precedence apart. The less commonly used operators (e.g. bit twiddlers) should have parens to increase readability and maintainability.

(BTW, I don't parenthesize expressions with && and ||. The operations are so common in boolean expressions [e.g if( a || b && c)] that I believe programmers should just know that && has a higher precedence than ||. I also think they should be fair game on the SCJP.)
osman cinar eren
Ranch Hand

Joined: Jan 25, 2005
Posts: 78
hi,

what should i understand of the precedence of casting?

regards
Abi Raj
Greenhorn

Joined: Jan 28, 2005
Posts: 28
hi Ramya,

This is how it works

1) (4*6)-(3/2)<<(2*5)>>>(1%2)-4^3

2) (24-1)<<10>>>(1-4)^3

3) ((23<<10)>>>-3)^3

23 << 10 = 23552 // Each left shift corresponds to multiplication of the value by 2. so 23 * 2 power 10 is 23552

4) (23552 >>> -3) ^3

23552 >>> -3

the value of right hand operand is -3 is ANDed with the mask 11111 (i.e 31), giving the shift distance of 29.

-3 & 31
1111 1111 1111 1111 1111 1111 1111 1101 & 0000 0000 0000 0000 0000 0000 0001 1111

29

23552 >>> 29

0000 0000 0000 0000 0101 1100 0000 0000 >>> 0000 0000 0000 0000 0000 0000 0001 1101

0000 0000 0000 0000 0000 0000 0000 0000

0

5) (0 ^ 3)

0000 ^ 0011

0011

3

Hope this helps
meena latha
Ranch Hand

Joined: Jan 24, 2005
Posts: 219
thanks raj.... one more thing ,y are u anding -3 with 31.
[ January 28, 2005: Message edited by: Ramya JP ]

subject: Operator precedence