std.bitmanip - bitshift?

via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sat Dec 13 02:47:15 PST 2014


On Friday, 12 December 2014 at 19:35:26 UTC, Steven Schveighoffer 
wrote:
> 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.
>

There's a dedicated >>> operator for unsigned right shift, the 
normal >> operator does a signed right shift, i.e. it copies the 
left-most bit:
http://dlang.org/expression#ShiftExpression

IMO, for consistency, bitarray should behave the same.

> 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.

Yes, that would be useful.


More information about the Digitalmars-d-learn mailing list