Beefy Boxes and Bandwidth Generously Provided by pair Networks
"be consistent"
 
PerlMonks  

Re(golf): I'm looking for the faster way to convert char 2 Bin and Bin 2 char (8bits)

by jynx (Priest)
on Jan 27, 2001 at 03:17 UTC ( #54673=note: print w/replies, xml ) Need Help??


in reply to I'm looking for the faster way to convert char 2 Bin and Bin 2 char (8bits)

beware before!

Yesterday i found an amusing little routine to do decimal to binary (not the same drek everyone did in school as i understand it). So i converted it to perl and felt like posting it. Unfortunately i may have messed up something, so if someone (like maybe IO) could tell me if i did or not that would be sweet.

sub dec2bin { my $num = shift; my @num; my $i = 0; (push @num, (($num & 2**$i) == 2**$i) ? 1 : 0) and $i++ until (2**$ +i > $num); return 0 + join '', reverse @num; }
It is completely untested, but it should work (as if that's any boon to a programmer)

jynx

update: changed the $n to $num on line 5 according to IO's suggestion (thank you).

Replies are listed 'Best First'.
Re: Re(golf): I'm looking for the faster way to convert char 2 Bin and Bin 2 char (8bits)
by I0 (Priest) on Jan 27, 2001 at 05:08 UTC
    Testing it would have found
    Name "main::n" used only once: possible typo at - line 5.
    But besides that, ** is a more expensive operation than you need here especially doing it 3 times per iteration.
    using 1<<$iin place of 2**$i would be a bit faster.
    my $i = 1; (push @num, (($num & $i) ? 1 : 0)) and $i<<=1 until $i > $num;
    is even better. And
    (push @num, (($num & 1) ? 1 : 0)) and $num>>=1 until 1 > $num;
    still faster...

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://54673]
help
Chatterbox?
[choroba]: The problem was bigger, as the test tried to call a method that didn't exist anymore
[marinersk]: :: ducking ::
[choroba]: because, someone renamed the method, but didn't notice it was used in the test, as the test was skipped
[marinersk]: Well, if the method doesn't exist, it would be hard to pass the test.
[choroba]: later, someone removed the new method, as all its usage places were safe, but didn't notice the test still used the old name
[choroba]: fortunately, it wasn't that hard to replace the method and fix a few remaining failures due to the changes we did to the codebase over the years
[marinersk]: choroba Sounds like a process improvement opportunity; tests may not all need to be run, but they should all be compiled with perl -c before check-in/promotion happens.
[choroba]: so, now I have the test, so I can start making changes in the code. Back to the original ticket, yay!
[marinersk]: I definitely love it when my $current_taask=& taskPop(); if ($current_task eq $original_task) { } is true.
[marinersk]: s/taask/task/g;

How do I use this? | Other CB clients
Other Users?
Others studying the Monastery: (14)
As of 2017-05-25 15:14 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?