Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer
 
PerlMonks  

Binary Math?

by Anonymous Monk
on Sep 30, 2003 at 21:35 UTC ( #295453=perlquestion: print w/replies, xml ) Need Help??
Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

Are there built in functions (or a module) to provide facilities for simple binary math (eg, accepting two strings representing bitstrings as arguments and returning a bitstring with the result of addition/subtraction) ?

Replies are listed 'Best First'.
Re: Binary Math?
by BrowserUk (Pope) on Sep 30, 2003 at 22:07 UTC

    I'm not aware of any modules for this, but I never looked as perl makes it so easy to this yourself.

    #! perl -slw use strict; sub b2n{ eval '0b'. $_[0] } sub n2b{ sprintf '%b', $_[0] } my( $bs1, $bs2 ) = ( '0100100100101', '1010101010100' ); print "$bs1 + $bs2 = ", n2b( b2n( $bs1 ) + b2n( $bs2 ) ); __END__ P:\test>295453 0100100100101 + 1010101010100 = 1111001111001

    If your bitstrings are longer than 32 bits (or 64 if your lucky enough to be using a 64-bit platform) then you might need something more elaborate.


    Examine what is said, not who speaks.
    "Efficiency is intelligent laziness." -David Dunham
    "When I'm working on a problem, I never think about beauty. I think only how to solve the problem. But when I have finished, if the solution is not beautiful, I know it is wrong." -Richard Buckminster Fuller
    If I understand your problem, I can solve it! Of course, the same can be said for you.

Re: Binary Math?
by athomason (Curate) on Sep 30, 2003 at 22:01 UTC
    Use oct to go from bitstrings to numbers and sprintf to go from a number to a bitstring. As for the math, the usual operators work once you've done the conversion.
    #!/usr/bin/perl use strict; use warnings; my $bitstring1 = shift @ARGV || '10010010111'; my $bitstring2 = shift @ARGV || '01101011010'; my $number1 = oct "0b$bitstring1"; my $number2 = oct "0b$bitstring2"; printf "%s + %s = %b\n", $bitstring1, $bitstring2, $number1 + $number2 +;

    Update

    As BrowserUK mentioned, this will only get you as far as your platform's integer types allow. Fortunately, Math::BigInt also accepts the '0b' prefix for input and has the as_bin method for output, and has replacements for oodles of math operations.

Re: Binary Math?
by BUU (Prior) on Sep 30, 2003 at 21:57 UTC
    Uh, are you looking for the binary operators  | & ^ defined in perlop?

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://295453]
Approved by jdtoronto
help
Chatterbox?
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others avoiding work at the Monastery: (5)
As of 2017-09-24 08:12 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    During the recent solar eclipse, I:









    Results (273 votes). Check out past polls.

    Notices?