File APIs for Java Developers Manipulate DOC, XLS, PPT, PDF and many others from your application. http://aspose.com/file-tools
Big Moose Saloon
 Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies Register / Login

# Short-cut formula

Richard Rex
Ranch Hand

Joined: Sep 19, 2005
Posts: 100
Hi,

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

"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)
Mani vannan
Ranch Hand

Joined: Aug 21, 2004
Posts: 185
Originally posted by Chard Rex:

a. unsigned right shift (>>> ?

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
Hi Manivannan Palanichamy,

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
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?
Richard Mendoza
Ranch Hand

Joined: Feb 26, 2003
Posts: 48
Hi,

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?

Does anyone know the short-cut formula here?
Bert Bates
author
Sheriff

Joined: Oct 14, 2002
Posts: 8898

5
Remember, this is only a topic for 1.4, not 5.0

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

Joined: Sep 19, 2005
Posts: 100
Hi Bert,

I was using jsdk1.4.2_08 for this program and I really get the output of -1 for all.
I just to know how?

Thanks!
Gokul Somasundaram
Greenhorn

Joined: Jul 17, 2005
Posts: 20
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
Sorry, i made a mistake . Only in 16 bit system -1(signed) becomes 65536 (unsigned).
Seb Mathe
Ranch Hand

Joined: Sep 28, 2005
Posts: 225
Remember that an & bitmask is applied to the right operand of the shift operators.

For int numbers, value of the mask is 0x1f (11111) (so the shift opertaion is always in a range 0-31)
a >> b == a >> (b & 0x1f)

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)

That's not true :
For example
x >> Integer.MIN_VALUE = x
(Integer.MIN_VALUE =-2147483648 = -2^32)
cause Integer.MIN_VALUE & 0x1f = 0

Regards,<br />Seb<br /> <br />SCJP 1.4

I agree. Here's the link: http://aspose.com/file-tools

subject: Short-cut formula