Logarithm

// author(s) [red_byte](https://github.com/i-redbyte)
// time complexity: O(1)
// space complexity: O(1)
// see logarithm_test.go

package binary

// LogBase2 Finding the exponent of n = 2**x using bitwise operations (logarithm in base 2 of n) [See more](https://en.wikipedia.org/wiki/Logarithm)
func LogBase2(n uint32) uint32 {
	base := [5]uint32{0x2, 0xC, 0xF0, 0xFF00, 0xFFFF0000}
	exponents := [5]uint32{1, 2, 4, 8, 16}
	var result uint32
	for i := 4; i >= 0; i-- {
		if n&base[i] != 0 {
			n >>= exponents[i]
			result |= exponents[i]
		}
	}
	return result
}