Click here to Skip to main content
15,909,199 members
Home / Discussions / C#
   

C#

 
GeneralRe: Base 2 Log Method Pin
Luc Pattyn29-Nov-07 9:56
sitebuilderLuc Pattyn29-Nov-07 9:56 
GeneralRe: Base 2 Log Method Pin
PIEBALDconsult29-Nov-07 10:19
mvePIEBALDconsult29-Nov-07 10:19 
GeneralRe: Base 2 Log Method Pin
Luc Pattyn29-Nov-07 10:36
sitebuilderLuc Pattyn29-Nov-07 10:36 
JokeRe: Base 2 Log Method Pin
PIEBALDconsult29-Nov-07 13:06
mvePIEBALDconsult29-Nov-07 13:06 
GeneralRe: Base 2 Log Method Pin
Luc Pattyn29-Nov-07 13:23
sitebuilderLuc Pattyn29-Nov-07 13:23 
GeneralRe: Base 2 Log Method Pin
PIEBALDconsult29-Nov-07 13:43
mvePIEBALDconsult29-Nov-07 13:43 
GeneralRe: Base 2 Log Method Pin
Luc Pattyn29-Nov-07 14:02
sitebuilderLuc Pattyn29-Nov-07 14:02 
GeneralRe: Base 2 Log Method Pin
PIEBALDconsult29-Nov-07 10:26
mvePIEBALDconsult29-Nov-07 10:26 
I wonder how mine would stack up; could you pass them through your test?

I started with this:

C#
public static int
MSB
(
    ulong Subject
)
{
    int result = 63 ;

    if ( Subject != 0 )
    {
        ulong runner = 1 ;

        runner <<= result ;

        while ( ( Subject & runner ) == 0 )
        {
            result-- ;
            runner >>= 1 ;
        }
    }
    else
    {
        result = -1 ;
    }

    return ( result ) ;
}


Then, taking your idea for binary search, I did this:

C#
public static int
MSB
(
    ulong Subject
)
{
    return
    (
        Subject > uint.MaxValue
    ?
        MSB ( (uint) ( Subject >> 32 ) ) + 32
    :
        MSB ( (uint) Subject )
    ) ;
}

public static int
MSB
(
    uint Subject
)
{
    return
    (
        Subject > ushort.MaxValue
    ?
        MSB ( (ushort) ( Subject >> 16 ) ) + 16
    :
        MSB ( (ushort) Subject )
    ) ;
}

public static int
MSB
(
    ushort Subject
)
{
    return
    (
        Subject > byte.MaxValue
    ?
        MSB ( (byte) ( Subject >> 8 ) ) + 8
    :
        MSB ( (byte) Subject )
    ) ;
}

public static int
MSB
(
    byte Subject
)
{
    int result = 7 ;

    if ( Subject != 0 )
    {
        byte runner = 128 ;

        while ( ( Subject & runner ) == 0 )
        {
            result-- ;
            runner >>= 1 ;
        }
    }
    else
    {
        result = -1 ;
    }

    return ( result ) ;
}

GeneralRe: Base 2 Log Method Pin
Skippums29-Nov-07 10:45
Skippums29-Nov-07 10:45 
GeneralRe: Base 2 Log Method Pin
PIEBALDconsult29-Nov-07 13:03
mvePIEBALDconsult29-Nov-07 13:03 
GeneralRe: Base 2 Log Method Pin
Skippums29-Nov-07 13:21
Skippums29-Nov-07 13:21 
GeneralRe: Base 2 Log Method [modified] Pin
PIEBALDconsult29-Nov-07 14:15
mvePIEBALDconsult29-Nov-07 14:15 
GeneralRe: Base 2 Log Method Pin
Skippums30-Nov-07 5:19
Skippums30-Nov-07 5:19 
GeneralRe: Base 2 Log Method Pin
PIEBALDconsult30-Nov-07 10:25
mvePIEBALDconsult30-Nov-07 10:25 
GeneralRe: Base 2 Log Method Pin
PIEBALDconsult3-Dec-07 11:07
mvePIEBALDconsult3-Dec-07 11:07 
GeneralRe: Base 2 Log Method Pin
Luc Pattyn29-Nov-07 13:39
sitebuilderLuc Pattyn29-Nov-07 13:39 
GeneralRe: Base 2 Log Method Pin
PIEBALDconsult29-Nov-07 13:48
mvePIEBALDconsult29-Nov-07 13:48 
GeneralRe: Base 2 Log Method Pin
Luc Pattyn29-Nov-07 14:13
sitebuilderLuc Pattyn29-Nov-07 14:13 
GeneralRe: Base 2 Log Method Pin
Luc Pattyn29-Nov-07 10:55
sitebuilderLuc Pattyn29-Nov-07 10:55 
GeneralRe: Base 2 Log Method Pin
PIEBALDconsult29-Nov-07 12:38
mvePIEBALDconsult29-Nov-07 12:38 
GeneralRe: Base 2 Log Method Pin
Luc Pattyn29-Nov-07 13:57
sitebuilderLuc Pattyn29-Nov-07 13:57 
GeneralRe: Base 2 Log Method Pin
PIEBALDconsult29-Nov-07 13:59
mvePIEBALDconsult29-Nov-07 13:59 
AnswerRe: Base 2 Log Method Pin
PIEBALDconsult29-Nov-07 6:02
mvePIEBALDconsult29-Nov-07 6:02 
GeneralRe: Base 2 Log Method Pin
Skippums29-Nov-07 6:22
Skippums29-Nov-07 6:22 
AnswerRe: Base 2 Log Method Pin
Luc Pattyn29-Nov-07 6:15
sitebuilderLuc Pattyn29-Nov-07 6:15 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.