dsalgo/
bit_reverse_divide_and_conquer_butterfly_usize.rs1pub 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}