Skip to main content

sp1_primitives/
utils.rs

1/// Reverse the bits of an integer within a specified bit length.
2///
3/// Takes an integer `x` and reverses its bits within the least significant `bit_len` bits.
4/// For example, reverse_bits_len(0b101, 3) = 0b101 (reversed) = 0b101.
5/// reverse_bits_len(0b001, 3) = 0b100.
6pub fn reverse_bits_len(x: usize, bit_len: usize) -> usize {
7    let mut result = 0;
8    let mut x = x;
9    for _ in 0..bit_len {
10        result = (result << 1) | (x & 1);
11        x >>= 1;
12    }
13    result
14}