Converting Between Numeric Bases

Discussion in 'Engineering Concepts' started by pradeep, Feb 21, 2007.

  1. pradeep

    pradeep Team Leader

    Joined:
    Apr 4, 2005
    Messages:
    1,645
    Likes Received:
    87
    Trophy Points:
    0
    Occupation:
    Programmer
    Location:
    Kolkata, India
    Home Page:
    http://blog.pradeep.net.in
    In mathematical numeral systems, the base or radix is usually the number of various unique digits, including zero, that a positional numeral system uses to represent numbers. For example, the decimal system, the most common system in use today, uses base ten, hence the maximum number a single digit will ever reach is 9, after which it is necessary to add another digit to achieve a higher number.

    The highest symbol of a positional numeral system usually has the value one less than the value of the radix of that numeral system. The standard positional numeral systems differ from one another only in the radix they use. The radix itself is almost always expressed in decimal notation. The radix is an integer that is greater than 1, since a radix of zero would not have any digits, and a radix of 1 would only have the zero digit.

    Converting Between Bases



    You are given the number 13 in base ten; this means 1 ten and 3 ones.
    You want to write it in base five, as some number of fives and some number of ones. (If the number were big enough, you might also need 25's, 125's, and so on, just as in base ten you might need hundreds or thousands.)

    So here is 13:

    Code:
         ___10___  1 1 1
        /        \ 
        oooooooooo o o o
        \________/ \___/
             1       3
            ten     ones
    
    Let's group it by 5's rather than 10's:

    Code:
         _5_   _5_  1 1 1
        /   \ /   \
        ooooo ooooo o o o
        \_________/ \___/
             2        3
           fives     ones
    
    So we have 2 fives and 3 ones; in base five, we write this as 23 (base 5).

    Let's try a bigger number: 68 (base ten). We can group it in fives by just dividing by 5, rather than drawing pictures:
    68 / 5 = 13 remainder 3​
    So we have 13 fives and 3 ones.

    But we're not done, because in base five we can't have any digits greater than 4 (just as in base ten we have no digits greater than 9). So now we have to group our 13 fives into groups of five fives.

    Divide again:
    13 / 5 = 2 remainder 3​
    This tells us that 13 is 2 fives and 3 ones; so 13 FIVES is 2 twenty-fives and 3 fives. Our number is then
    68 (base ten) = 2 (25's) + 3 (5's) + 3 (1's)​

    which we write as 233.

    Code:
         _25   _25   _5_   _5_   _5_  1 1 1
        /   \ /   \ /   \ /   \ /   \
        ooooo ooooo ooooo ooooo ooooo o o o
        ooooo ooooo
        ooooo ooooo
        ooooo ooooo
        ooooo ooooo
        \_________/ \_______________/ \___/
             2              3           3
        twenty-fives      fives        ones
    
    Check it out:
    2x25 + 3x5 + 3x1 = 50 + 15 + 3 = 68​
    Converting Between Bases Programatically (PHP)

    PHP:
    define("HEX",16);
    define("BINARY",2);
    define("OCT",8);
    define("BASE10",10);
    define("DECIMAL"10);

    function 
    convertBase($number$fromBase 10$toBase 2
    {
      
        if(
    $toBase 36 || $toBase 2)            //check base validity
            
    return "Invalid originating base.";
        if(
    $fromBase 36 || $fromBase 2)
            return 
    "Invalid destination base.";

        @list(
    $number$decimal) = explode(".",$number);
        for(
    $i 0$i strlen($number); $i++) //convert to base 10
        
    {        
            
    $digit substr($number$i1);
            if(
    eregi("[a-z]",$digit)) 
            {
                
    $x ord($digit) - 65 10;
                if(
    $x $fromBase)
                
    $x -= 32;
                
    $digit $x;
            }
            @
    $base10 += $digit * (pow($fromBasestrlen($number) - $i 1));
        }

        
    $number $base10;
        if(
    $toBase == 10)
        return 
    $number;
        
    $q $number;
        while(
    $q != 0//convert base 10 equivalent to specified base
        
    {        
            
    $r $q $toBase;
            
    $q floor($q $toBase);
            if(
    $r 9)
              
    $r chr(($r 9) + 64);
            @
    $baseres "$r"$baseres";
        }

        return 
    $baseres;
    }
    Example usage:
    PHP:
    print convertBase(15,DECIMAL,HEX); // when you are converting between standard bases

    print convertBase(15,7,5); // any base you would like to give
     
  2. pobi

    pobi New Member

    Joined:
    Aug 30, 2008
    Messages:
    3
    Likes Received:
    0
    Trophy Points:
    0
    very inspiring.

    i remember my schooldays whenever i read statements like this sigh. i also remember my professors. :embarasse
     
  3. shipra123

    shipra123 New Member

    Joined:
    Oct 13, 2009
    Messages:
    62
    Likes Received:
    0
    Trophy Points:
    0
    Seriously Pobi,I completely agree with you. The moment I read this post, I went nostalgic with the school and college day.
     
  4. SEO_services

    SEO_services New Member

    Joined:
    Jan 11, 2011
    Messages:
    12
    Likes Received:
    0
    Trophy Points:
    0
    Occupation:
    SEO services
    Location:
    Portland/USA
    Home Page:
    http://sentersoftech.com/
    Explained very well and good links to it.
     

Share This Page

  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice