Win a copy of Learning OpenStack Networking: Build a solid foundation in virtual networking technologies for OpenStack-based clouds this week in the Cloud/Virtualization forum!
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other all forums
this forum made possible by our volunteer staff, including ...
Marshals:
• Liutauras Vilda
• Campbell Ritchie
• Tim Cooke
• Bear Bibeault
• Devaka Cooray
Sheriffs:
• Jeanne Boyarsky
• Knute Snortum
• Junilu Lacar
Saloon Keepers:
• Tim Moores
• Ganesh Patekar
• Stephan van Hulst
• Pete Letkeman
• Carey Brown
Bartenders:
• Tim Holloway
• Ron McLeod
• Vijitha Kumara

# Short-cut formula

Ranch Hand
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

Ranch Hand
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]

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

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

author
Sheriff
Posts: 8981
19
Remember, this is only a topic for 1.4, not 5.0

Richard Rex
Ranch Hand
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!

Greenhorn
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
Posts: 20
Sorry, i made a mistake . Only in 16 bit system -1(signed) becomes 65536 (unsigned).

Ranch Hand
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

 Consider Paul's rocket mass heater.