func BitLenUint64(n uint64) int {
	if b := n >> 56; b != 0 {
		return log2[b] + 56 + 1
	}
	if b := n >> 48; b != 0 {
		return log2[b] + 48 + 1
	}
	if b := n >> 40; b != 0 {
		return log2[b] + 40 + 1
	}
	if b := n >> 32; b != 0 {
		return log2[b] + 32 + 1
	}
	if b := n >> 24; b != 0 {
		return log2[b] + 24 + 1
	}
	if b := n >> 16; b != 0 {
		return log2[b] + 16 + 1
	}
	if b := n >> 8; b != 0 {
		return log2[b] + 8 + 1
	}
	return log2[n] + 1
}
BitLenUint64 returns the bit width of the non zero part of n.
package mathutil
import (
	"math/big"
)
func BitLenByte(n byte) int {
	return log2[n] + 1
}
func BitLenUint16(n uint16) int {
	if b := n >> 8; b != 0 {
		return log2[b] + 8 + 1
	}
	return log2[n] + 1
}
func BitLenUint32(n uint32) int {
	if b := n >> 24; b != 0 {
		return log2[b] + 24 + 1
	}
	if b := n >> 16; b != 0 {
		return log2[b] + 16 + 1
	}
	if b := n >> 8; b != 0 {
		return log2[b] + 8 + 1
	}
	return log2[n] + 1
}
func BitLen(n int) int {  
	if IntBits == 64 {
		return BitLenUint64(uint64(n))
	}
	if b := byte(n >> 24); b != 0 {
		return log2[b] + 24 + 1
	}
	if b := byte(n >> 16); b != 0 {
		return log2[b] + 16 + 1
	}
	if b := byte(n >> 8); b != 0 {
		return log2[b] + 8 + 1
	}
	return log2[byte(n)] + 1
}
func BitLenUint(n uint) int {  
	if IntBits == 64 {
		return BitLenUint64(uint64(n))
	}
	if b := n >> 24; b != 0 {
		return log2[b] + 24 + 1
	}
	if b := n >> 16; b != 0 {
		return log2[b] + 16 + 1
	}
	if b := n >> 8; b != 0 {
		return log2[b] + 8 + 1
	}
	return log2[n] + 1
}