<< Approximate square root in Rust

pub fn aprx_sqrt(n: usize) -> usize {
    let mut _bits = (std::mem::size_of::<usize>() << 3) - 1;
    while ((n >> _bits) & 1) == 0 {
        _bits -= 1;
    }

    1 << ((_bits >> 1) + 1)
}

You will not get an explanation, I'm sorry.