How to reverse the bits of a number in Rust

1 Answer

0 votes
fn reverse_bits(n: u32) -> u32 {
    let bin = format!("{:032b}", n);
    let rev: String = bin.chars().rev().collect();
    
    u32::from_str_radix(&rev, 2).unwrap()
}

fn bits(n: u32) -> String {
    let bin = format!("{:032b}", n);
    let chunks: Vec<&str> = bin.as_bytes()
        .chunks(8)
        .map(|c| std::str::from_utf8(c).unwrap())
        .collect();
    
    chunks.join(" ")
}

fn main() {
    let a: u32 = 19;
    let b: u32 = 3;

    let ra = reverse_bits(a);
    let rb = reverse_bits(b);

    println!("Original 19: {}", bits(a));
    println!("Reversed 19: {}", bits(ra));
    println!();
    println!("Original 3:  {}", bits(b));
    println!("Reversed 3:  {}", bits(rb));
}


/*
run:

Original 19: 00000000 00000000 00000000 00010011
Reversed 19: 11001000 00000000 00000000 00000000

Original 3:  00000000 00000000 00000000 00000011
Reversed 3:  11000000 00000000 00000000 00000000

*/

 



answered Apr 4 by avibootz
...