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.

For shift operators manipulating positive numbers we can use the short-cut formula,

For example: for signed right shift: x >> 3, can be solved using the formula x * (2 raised to 3) for signed left shift: x << 3, can be solved using the formula x / (2 raised to 3)

Is there a short-cut formula to determine the following: a. unsigned right shift (>>> ? b. signed right or left shift manipulating negative numbers? i.e. -5 >> 3 or -5 << 3 or -5 >> -3 or -5 << -3

Thanks in advance!

"If you fail to plan, you plan to fail."<br /> <br />Chad<br />SCJP 1.4<br />SCWCD 1.4<br />SCBCD 1.3<br />SCDJWS (next)

unsigned right shift operator divides the left hand operand to 2 to the power of right hand operand( Only when the left hand operand is positive value)

b. signed right or left shift manipulating negative numbers? i.e. -5 >> 3 or -5 << 3 or -5 >> -3 or -5 << -3

signed left always multiplies the left hand operand by 2 to the power of right hand operand.

signed right ( >>) divides the left hand operand by 2 to the power of right hand operand [except -1 >> 1 = -1]

Manivannan

Richard Rex
Ranch Hand

Joined: Sep 19, 2005
Posts: 100

posted

0

Hi Manivannan Palanichamy,

Thanks for your reply.

I'm just with this..

public class ShiftOp{ public static void main(String[] args){ System.out.println(-6 >> -1); System.out.println(-6 >> -2); System.out.println(-6 >> -3); System.out.println(-6 >> -4); System.out.println(-6 >> -5); } }

The output for this program are all -1.

How do we do this using the short-cut formula?

Mani vannan
Ranch Hand

Joined: Aug 21, 2004
Posts: 185

posted

0

Originally posted by Chard Rex:

The output for this program are all -1. How do we do this using the short-cut formula?

hi, dont know the reason for this output. May be this also a short-cut?

Hope i am not irritating you with this answer. 1) Eventhough you have provided the negative number after the shift operator, it is getting considered as positive(considered as unsigned). In a 8-bit signed integer representation -1 is (1111 1111). In unsigned it becomes 256. So if we give -6 >> -1 is equal to -6 >> 256(consider the equivalent in 32 bit system i.e. 65536). So in a 8 bit system, if i shift it by 256 times on the right side(with sign preserved), then it becomes -1 (for -ve) and 0(for +ve). So the formula may be written like this.

(In a 32 bit representation)

x >> y = (x / 2^y) (if y < 32) = 0 (if x is +ve and y >=32 or y<0) = -1 (if x is -ve and y>=32 or y<0)

the point to be remembered is that y will be considered always positive. So any negative number in signed system will become a positive number on the higher end. I haven't checked my observation with programs. Please inform me, if you find some mistakes.

Thanks, Gokul.

Gokul Somasundaram
Greenhorn

Joined: Jul 17, 2005
Posts: 20

posted

0

Sorry, i made a mistake . Only in 16 bit system -1(signed) becomes 65536 (unsigned).