[CLJ-827] unsigned-bit-shift-right Created: 09/Aug/11 Updated: 12/Apr/13
|Fix Version/s:||Release 1.6|
Add a clojure equivalent of >>>.
A simple version of this is implemented here (https://github.com/joegallo/clojure/tree/unsigned-bit-shift-right), and just follows the example set by shift-right.
The downside of this implementation is that it treats all integer types as longs, and shifts them accordingly, which yields different results than you would get in java. A previous version of this did not have the same problem, when BitOps was its own thing. I'm not sure if this limitation is acceptable and appropriate, or needs to be worked around (my inclination is the latter).
|Comment by Joe Gallo [ 11/Nov/11 12:58 PM ]|
I just realized (with the asssistance of Paul Stadig) that just doing only longs is probably sufficient, as you can get the integer version if you really want it:
> (int (bit-and Integer/MAX_VALUE (unsigned-bit-shift-right -5 1)))
Of course, that's less efficient than just doing it directly with java, but it's enough that I think my concern from the previous comment is addressed.
|Comment by Tim McCormack [ 16/Jan/12 6:01 PM ]|
I have attached "0001-CLJ-827-Add-bit-shift-right-logical.patch", which implements a logical bit-shift-right using the same JVM bytecode as >>>.
The patch mimics the implementations of << and >>.
|Comment by Stuart Halloway [ 02/Feb/13 5:09 PM ]|
For context, this feature appears to be needed for Clojure-in-Clojure data structures: https://groups.google.com/d/msg/clojure-dev/iAwH7CLSFzE/6wzDH4RS1YQJ
|Comment by Michał Marczyk [ 08/Feb/13 5:31 AM ]|
Just wanted to note that I've introduced this operation to ClojureScript when implementing PersistentHashMap. The name over there is bit-shift-right-zero-fill. Would it be alright for Clojure to use that name? Failing that, ClojureScript would probably have to change to match.