computerSPro - 1 year ago 61

Java Question

I want to do left shifting but filling with zero, just like

`int number = 20 >>> 10 = ( 0000 0000 0000 0000 0000 0000 0001 0100 )`

int number = 20 >>> 32 = ( 0000 0000 0000 0000 0000 0000 0000 0000 )

I want to do the same with left shift, since there is no operator <<< for leftshift

`int number = 20 << 32 = 0000 0000 0000 0000 0000 0000 0001 0100 ;`

I want to fill it with zeros just like >>> operator. So how I can do this?

Answer Source

The `<<`

left shift operator will bring in zeros just as you want to.

The reason why there are 2 right shift operators (`>>`

and `>>>`

) is because in 2's complement form negative numbers have a bit value of `1`

in the left-most bit position. The right shift operator `>>`

will add the sign bit (`1`

in case of negative numbers, and `0`

in case of positive numbers or zero) on the left side while the other (`>>>`

) will always add zeros.

Both right shift operators have their use.

The language specification states that if bit shifting operators are applied on `int`

since it is 32-bit long, only the 5 lowest bit is used to determine how many times to shift the number.

So if you shift by 32 which is `100000`

in binary, it is equivalent to shift by 0 which means not to shift! And if you want to shift a 64-bit `long`

, the 6 lowest bit is used only to tell how many times to shift.