Difference between revisions of "BinaryDecimalConverter"

From Second Life Wiki
Jump to navigation Jump to search
(Won't crash on negative numbers now. I'm wondering if 'binary = (string)(val & 1) + binary' would be faster than the if-else block.)
m (<lsl> tag to <source>)
 
(One intermediate revision by one other user not shown)
Line 1: Line 1:
{{LSL Header}}
{{LSL Header}}
The next function converts a binary value to a decimal number. Works +/- 5 times faster than [[Base2Dec]] :
The next function converts a binary value to a decimal number. Works +/- 5 times faster than [[Base2Dec]] :
<lsl>integer binToDec(string val)
<source lang="lsl2">integer binToDec(string val)
{
{
     integer dec = 0;
     integer dec = 0;
Line 8: Line 8:
         dec = (dec << 1) + (integer)llGetSubString(val, i, i);
         dec = (dec << 1) + (integer)llGetSubString(val, i, i);
     return dec;
     return dec;
}</lsl>
}</source>


This one converts a decimal to a binary value:
This one converts a decimal to a binary value:


<lsl>string decToBin(integer val)
<source lang="lsl2">string decToBin(integer val)
{
{
     string binary = (string)(val & 1);
     string binary = (string)(val & 1);
Line 23: Line 23:
     }
     }
     return binary;
     return binary;
}</lsl>
}</source>


Greets from Soundless :)
Greets from Soundless :)
This version of decToBin doesn't crash on negatives, is shorter source code and about 50 bytes shorter in Mono bytecode than the original, but sadly about 50% slower. << and >> are expensive on bytecode.
<source lang="lsl2">
string decToBin(integer val)
{
    string binary;
    do
        binary = (string) (val & 1) + binary;
    while (val /= 2);
    return binary;
}
</source>
((Omei))

Latest revision as of 19:27, 24 January 2015

The next function converts a binary value to a decimal number. Works +/- 5 times faster than Base2Dec :

integer binToDec(string val)
{
    integer dec = 0;
    integer i = ~llStringLength(val);
    while(++i)
        dec = (dec << 1) + (integer)llGetSubString(val, i, i);
    return dec;
}

This one converts a decimal to a binary value:

string decToBin(integer val)
{
    string binary = (string)(val & 1);
    for(val = ((val >> 1) & 0x7FFFffff); val; val = (val >> 1))
    {
        if (val & 1)
            binary = "1" + binary;
        else
            binary = "0" + binary;
    }
    return binary;
}

Greets from Soundless :)

This version of decToBin doesn't crash on negatives, is shorter source code and about 50 bytes shorter in Mono bytecode than the original, but sadly about 50% slower. << and >> are expensive on bytecode.

string decToBin(integer val)
{
    string binary;
    do
        binary = (string) (val & 1) + binary;
    while (val /= 2);
    return binary;
}

((Omei))