dsalgo/
bit_reverse_divide_and_conquer_butterfly_usize.rs

1pub fn bit_reverse(mut n: usize) -> usize {
2    const MASKS: [usize; 6] = [
3        0xaaaaaaaaaaaaaaaa,
4        0xcccccccccccccccc,
5        0xf0f0f0f0f0f0f0f0,
6        0xff00ff00ff00ff00,
7        0xffff0000ffff0000,
8        0xffffffff00000000,
9    ];
10
11    for (i, &m) in MASKS.iter().enumerate() {
12        let d = 1 << i;
13
14        n = ((n & m) >> d) | ((n & !m) << d);
15    }
16
17    n
18}
19
20#[cfg(test)]
21
22mod tests {
23
24    use super::*;
25
26    #[test]
27
28    fn test() {
29        assert_eq!(bit_reverse(0xffffffff0000f000), 0x000f0000ffffffff);
30    }
31}