pub const fn bits(&self) -> u32 {
        let mut i = NUM_LIMBS;
        while i > 0 {
            if self.limbs[i - 1] != 0 {
                return i as u32 * u64::BITS - self.limbs[i - 1].leading_zeros();
            }
            i -= 1;
        }
        0
    }
Returns the number of bits needed to represent the number (0 for zero).
If nonzero, this is equivalent to one plus the floored log2 of the number.
crates/math/src/unsigned_integer/element.rs