Quantcast
Channel: What is the fastest/most efficient way to find the highest set bit (msb) in an integer in C? - Stack Overflow
Viewing all articles
Browse latest Browse all 36

Answer by user15363887 for What is the fastest/most efficient way to find the highest set bit (msb) in an integer in C?

$
0
0

This looks big but works really fast compared to loop thank from bluegsmith

int Bit_Find_MSB_Fast(int x2){    long x = x2 & 0x0FFFFFFFFl;    long num_even = x & 0xAAAAAAAA;    long num_odds = x & 0x55555555;    if (x == 0) return(0);    if (num_even > num_odds)    {        if ((num_even & 0xFFFF0000) != 0) // top 4        {            if ((num_even & 0xFF000000) != 0)            {                if ((num_even & 0xF0000000) != 0)                {                    if ((num_even & 0x80000000) != 0) return(32);                    else                        return(30);                }                else                {                    if ((num_even & 0x08000000) != 0) return(28);                    else                        return(26);                }            }            else            {                if ((num_even & 0x00F00000) != 0)                {                    if ((num_even & 0x00800000) != 0) return(24);                    else                        return(22);                }                else                {                    if ((num_even & 0x00080000) != 0) return(20);                    else                        return(18);                }            }        }        else        {            if ((num_even & 0x0000FF00) != 0)            {                if ((num_even & 0x0000F000) != 0)                {                    if ((num_even & 0x00008000) != 0) return(16);                    else                        return(14);                }                else                {                    if ((num_even & 0x00000800) != 0) return(12);                    else                        return(10);                }            }            else            {                if ((num_even & 0x000000F0) != 0)                {                    if ((num_even & 0x00000080) != 0)return(8);                    else                        return(6);                }                else                {                    if ((num_even & 0x00000008) != 0) return(4);                    else                        return(2);                }            }        }    }    else    {        if ((num_odds & 0xFFFF0000) != 0) // top 4        {            if ((num_odds & 0xFF000000) != 0)            {                if ((num_odds & 0xF0000000) != 0)                {                    if ((num_odds & 0x40000000) != 0) return(31);                    else                        return(29);                }                else                {                    if ((num_odds & 0x04000000) != 0) return(27);                    else                        return(25);                }            }            else            {                if ((num_odds & 0x00F00000) != 0)                {                    if ((num_odds & 0x00400000) != 0) return(23);                    else                        return(21);                }                else                {                    if ((num_odds & 0x00040000) != 0) return(19);                    else                        return(17);                }            }        }        else        {            if ((num_odds & 0x0000FF00) != 0)            {                if ((num_odds & 0x0000F000) != 0)                {                    if ((num_odds & 0x00004000) != 0) return(15);                    else                        return(13);                }                else                {                    if ((num_odds & 0x00000400) != 0) return(11);                    else                        return(9);                }            }            else            {                if ((num_odds & 0x000000F0) != 0)                {                    if ((num_odds & 0x00000040) != 0)return(7);                    else                        return(5);                }                else                {                    if ((num_odds & 0x00000004) != 0) return(3);                    else                        return(1);                }            }        }    }}

Viewing all articles
Browse latest Browse all 36

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>