# Signed vs unsigned shift

suggest changeIn Java, all number primitives are signed. For example, an int always represent values from [-2^31 - 1, 2^31], keeping the first bit to sign the value - 1 for negative value, 0 for positive.

Basic shift operators `>>`

and `<<`

are signed operators. They will conserve the sign of the value.

But it is common for programmers to use numbers to store *unsigned values*. For an int, it means shifting the range to [0, 2^32 - 1], to have twice as much value as with a signed int.

For those power users, the bit for sign as no meaning. Thatâ€™s why Java added `>>>`

, a left-shift operator, disregarding that sign bit.

initial value: 4 ( 100) signed left-shift: 4 << 1 8 ( 1000) signed right-shift: 4 >> 1 2 ( 10) unsigned right-shift: 4 >>> 1 2 ( 10) initial value: -4 ( 11111111111111111111111111111100) signed left-shift: -4 << 1 -8 ( 11111111111111111111111111111000) signed right-shift: -4 >> 1 -2 ( 11111111111111111111111111111110) unsigned right-shift: -4 >>> 1 2147483646 ( 1111111111111111111111111111110)

**Why is there no ****<<<**** ?**

This comes from the intended definition of right-shift. As it fills the emptied places on the left, there are no decision to take regarding the bit of sign. As a consequence, there is no need for 2 different operators.

See this question for a more detailled answer.