std.bitmanip - bitshift?

Steven Schveighoffer via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Fri Dec 12 11:35:25 PST 2014


On 12/12/14 2:17 PM, H. S. Teoh via Digitalmars-d-learn wrote:
> On Fri, Dec 12, 2014 at 11:13:38AM -0500, Steven Schveighoffer via Digitalmars-d-learn wrote:
>> On 12/12/14 8:39 AM, Trollgeir wrote:
>>> http://dlang.org/phobos/std_bitmanip.html
>>>
>>> Does anyone know how to bit-shift a BitArray?
>>>
>>> I'm trying to make spikes in a neural network travel along the
>>> bits as they have various lengths.
>>
>> That is a surprising omission from a bit-oriented type...
>>
>> You also cannot opSlice a BitArray. Nice for enhancement requests, if
>> you want to add them to the issue tracker.
> [...]
>
> I've started working on an implementation of this... but it's not very
> clear what the correct semantics should be. For example, if my starting
> BitArray b is 1101, say, what should be the result after b>>=1? Should
> it be 0110, 110, or 01101?

0110

In other words, I would assume the same semantics as an unsigned int.

In other other words, it's like each bit moves one to the right, and the 
bit that has no source gets a 0.

It may be useful to add some other functions, such as roll, which would 
move bits that fall off the end back onto the top.

And maybe expose shift as a function, which allows you to specify the 
bit value (or maybe range of bits) that should be shifted in from the 
other side.

Note, I would not allow just opBinary, only opBinaryAssign. No reason to 
construct temporary BitArrays.

-Steve


More information about the Digitalmars-d-learn mailing list