Win a copy of Kotlin in Action this week in the Kotlin forum!
programming forums Java Java JSRs Mobile Certification Databases Caching Books Engineering Languages Frameworks Products This Site Careers Other all forums
this forum made possible by our volunteer staff, including ...
Marshals:
Sheriffs:
Saloon Keepers:
Bartenders:

# shift ops!

ashok khetan
Ranch Hand
Posts: 153
hi,
a simple ?, if the right hand operand in a bit-shift expression is negative(e.g. 10 >> -2), then is there any separate rule for such calculations?
ashok.

Angela Narain
Ranch Hand
Posts: 327
The shift distance for integer values is always in the range
of 0 to 31 and for long values in the range of 0 to 63
.So you cannot possibily have a negative shift distance !
Correct me if wrong

Cameron Park
Ranch Hand
Posts: 371
I think shifting by negative value is actually shifting by their positive counterparts. For instance, 2>>-1 actually equals 2>>1111 1111 1111 1111, which eqauls 2>>31.

Guoqiao Sun
Ranch Hand
Posts: 317
Let's assume the right hand side operand is R, the left side operand is L.
For shift operation L SHIFT R, There will be a % operation if R is not inside the given range.
If L is int, the range is 0-32.
If L is long, the range is 0-64.
In that case, the result of the following
If L is int, R%32
If L is long, R%64

will be replaced for R.
Hope it helps.
------------------
Guoqiao Sun
Sun Certified Programmer for Java™ 2 Platform
Try my mock exam¹ at my homepage.

Dave Vick
Ranch Hand
Posts: 3244
the actual operation carried out on the right hand operand is a bitwise & using a mask of 0x1F for ints and 0x3F for longs. For positive values this is the same as a %32 or %64, but for negative values it behaves differently. What it amounts to, at least in the few tests I've done, is that if the operand is greater than -32(for ints) it adds the operand to 32. So a shift of -4 would actually be a shift of 28. If the operand is less than -32 it will do a %32 on the operand then add the result (a negative number) to 32.
For a line like this:
54 >>> -34;
take -34%32, the result is -2, add -2 to 32, the result is 30, so the line could be written as:
54 >>> 30;
As a follow up, I dont think you'll see anything like this on the test - I didn't and dont know of anyone else who did.
hope this helped

------------------
Dave
Sun Certified Programmer for the Javaï¿½ 2 Platform