This week's book giveaway is in the Clojure forum.
We're giving away four copies of Clojure in Action and have Amit Rathore and Francis Avila on-line!
See this thread for details.
Win a copy of Clojure in Action this week in the Clojure forum!
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic

Operators

 
Mathangi Shankar
Ranch Hand
Posts: 56
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
class EBH020 {
public static void main (String[] args) {
int a = 1 | 2 ^ 3 & 5;
int b = ((1 | 2) ^ 3) & 5;
int c = 1 | (2 ^ (3 & 5));
System.out.print(a + "," + b + "," + c);
}}

Please explain me the output of the above code.
 
Surasak Leenapongpanit
Ranch Hand
Posts: 341
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
int a = 1 | 2 ^ 3 & 5
= 0001 | 0010 ^ 0011 & 0101
-----------------------------------------
int b = ((1 | 2) ^ 3) & 5
= ((0001 | 0010) ^ 0011) & 0101
= (0011 ^ 0011) & 0101
= 0000 & 0101
= 0000
= 0
-----------------------------------------
int c = 1 | (2 ^ (3 & 5))
= 0001 | (0010 ^ (0011 & 0101))
= 0001 | (0010 ^ 0001)
= 0001 | 0011
= 0011
= 3
-----------------------------------------
 
Barry Gaunt
Ranch Hand
Posts: 7729
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
a gives the same result as c (3) because the expressions are really the same due to the relative binding strength of the operators &, ^, and |.
 
Sumithab Baskaran
Ranch Hand
Posts: 52
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
so, for a), the order of precedence is & , ^ and then |. Is that right?
 
Barry Gaunt
Ranch Hand
Posts: 7729
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Don't take my word for it, do what I did; find a precedence table:
Roedy Green's for example.
[ December 03, 2004: Message edited by: Barry Gaunt ]
 
Mathangi Shankar
Ranch Hand
Posts: 56
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Thanks All. I was struglling with the output of the 1st one then found that the order of precedence is |,^,& in the ascending order.

& has the highest order of precedence.


--------------------------------------------

Mathangi.
 
Bruce Evans
Greenhorn
Posts: 14
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
A word of advice if you're going to take the SCJP exam.

MEMORIZE the precedence rules! Just like you have to know the keywords,
all 49 of them, know these rules too.
-Bruce

Originally posted by Mathangi Shankar:
class EBH020 {
public static void main (String[] args) {
int a = 1 | 2 ^ 3 & 5;
int b = ((1 | 2) ^ 3) & 5;
int c = 1 | (2 ^ (3 & 5));
System.out.print(a + "," + b + "," + c);
}}

Please explain me the output of the above code.
 
It is sorta covered in the JavaRanch Style Guide.
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic