Agreed. You can pack the bits to form a number and then manipulate them using boolean operators.

I found two problems with that approach though. The first is converting a list of bit-indices to a (set of) masks to allow the bit manipulations is pretty inefficient.

Zaxo neatly sidestepped that by taking the list (2, 5, 8) as being a fixed list and performing the conversion once. If that is the case in the OP's requirements than his method (or yours:) will probably be much quicker, but that wasn't my interpretation of the OP.

The second problem is that whilst the bit-string given as an example only had 10-bits, it was far from clear that this was the limit, or even typical. If the length of the bit-string moves beyond the largest native-integer size, then the boolean manipulations fall down.

Only the OP can know exactly what form his data takes and therefore which approach is best for his application. If he can obtain/maintain his bits as bits rather than bytes, that would definitely be the way to go.


Examine what is said, not who speaks.
"Efficiency is intelligent laziness." -David Dunham
"Think for yourself!" - Abigail

In reply to Re: Re: Re: Re: fast bit twiddling by BrowserUk
in thread fast bit twiddling by spurperl

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.