Bit-Twiddling

 view release on metacpan or  search on metacpan

examples/benchmarks.pl  view on Meta::CPAN

    int count;

    for ( count = 0; n; count++ )
        n &= n - 1;
    return count;
}
EOC

*csb_c = *count_set_bits;

sub csb_perl_loop($n) {
    my $count = 0;
    while ($n) {
        $count++ if $n & 1;
        $n >>= 1;
    }
    return $count;
}

sub csb_perl_c($n) {
    my $count = 0;
    for ( ; $n; $count++ ) {
        $n &= $n - 1;
    }
    return $count;
}

sub csb_perl_str($n) {
    my $str = sprintf "%b", $n;
    return $str =~ tr/1//d;
}

sub csb_perl_int($n) {
    my $count = 0;

    while ($n) {
        $count++ if $n & 1;
        $n >>= 1;
    }
    return $count;
}

dd csb_perl_str(10);



( run in 0.818 second using v1.01-cache-2.11-cpan-65fba6d93b7 )