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 Pie Elite all forums
this forum made possible by our volunteer staff, including ...
Marshals:
• Tim Cooke
• Campbell Ritchie
• Ron McLeod
• Junilu Lacar
• Liutauras Vilda
Sheriffs:
• Paul Clapham
• Jeanne Boyarsky
• Henry Wong
Saloon Keepers:
• Tim Moores
• Tim Holloway
• Stephan van Hulst
• Piet Souris
• Carey Brown
Bartenders:
• Jesse Duncan
• Frits Walraven
• Mikalai Zaikin

# Short-cut formula

Ranch Hand
Posts: 100
• • Number of slices to send:
Optional 'thank-you' note:
• • 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
• • Number of slices to send:
Optional 'thank-you' note:
• • 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
• • Number of slices to send:
Optional 'thank-you' note:
• • 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
• • Number of slices to send:
Optional 'thank-you' note:
• • 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
• • Number of slices to send:
Optional 'thank-you' note:
• • 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 Posts: 9035
21
• • Number of slices to send:
Optional 'thank-you' note:
• • Remember, this is only a topic for 1.4, not 5.0

Richard Rex
Ranch Hand
Posts: 100
• • Number of slices to send:
Optional 'thank-you' note:
• • 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
• • Number of slices to send:
Optional 'thank-you' note:
• • 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
• • Number of slices to send:
Optional 'thank-you' note:
• • Sorry, i made a mistake . Only in 16 bit system -1(signed) becomes 65536 (unsigned).

Ranch Hand
Posts: 225
• • Number of slices to send:
Optional 'thank-you' note:
• • 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 pie. tiny ad: Building a Better World in your Backyard by Paul Wheaton and Shawn Klassen-Koop https://coderanch.com/wiki/718759/books/Building-World-Backyard-Paul-Wheaton