Win a copy of Re-engineering Legacy Software this week in the Refactoring forum
or Docker in Action in the Cloud/Virtualization forum!

Shift Operation with negative operand

Ruben Lunda
Greenhorn
Posts: 5
I dont understand the logic of this operation, when the second value is negative, like:

I try it in this
Applet

but i dont undertand it.
thanks

marc weber
Sheriff
Posts: 11343
Good question! Here's what I found:

"...when the value to be shifted (left-operand) is an int, only the last 5 [binary] digits of the right-hand operand are used to perform the shift. The actual size of the shift is the value of the right-hand operand masked by 31 ... [so] the shift distance is always between 0 and 31."

Ref: http://www.janeg.ca/scjp/oper/shift.html

In binary, an int of -1 is:
11111111 11111111 11111111 11111111

Taking only the last 5 digits, we get:
00000000 00000000 00000000 00011111

...which is 31.

Therefore (1 << -1) is equivalent to (1 << 31).

Hmmm... Who knew?
[ September 16, 2004: Message edited by: marc weber ]

Ruben Lunda
Greenhorn
Posts: 5
Thank you marc! that makes it all clear!!!

Barry Gaunt
Ranch Hand
Posts: 7729
A small add-on to marc's post: it's 6 bits for shifting a long.

Barry Gaunt
Ranch Hand
Posts: 7729