This week's book giveaway is in the OO, Patterns, UML and Refactoring forum. We're giving away four copies of Refactoring for Software Design Smells: Managing Technical Debt and have Girish Suryanarayana, Ganesh Samarthyam & Tushar Sharma on-line! See this thread for details.

int a =-8; int b=~-33; a>>>=b; System.out.println(a); above code prints -8 ,how?Can anybody please explain? Is expression like 8>>-4 valid?how to solve questions that involve shifting with negative numbers? thanks Veena

SCJP1.4
"Continuous effort - not strength or intelligence - is the key to unlocking our potential."
*Winston Churchill

int a =-8; int b=~-33; a>>>=b; System.out.println(a); above code prints -8 ,how?Can anybody please explain? Is expression like 8>>-4 valid?how to solve questions that involve shifting with negative numbers? thanks Veena

Step 1) a>>=b is expanded to a = (int) (a >> b) Step 2) b = ~-33 = -(-33) - 1 = 33 - 1 b = 32 (remember ~x = -(x) - 1) Step 3) a = (int) (a >> 32) 32 in binary is represented as 00000000 00000000 00000000 00100000 When shifting numbers if the type is int then the number of places to shift is denoted by the top 5 bits of the number to shift by in this case the top 5 bits of 32 are 00000 which is 0 so in short the expression is reduced to Step 4) a = (int) (a >> 0) a = (int) a a = -8 HTH