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); } } } }}