How to remove a bit from a number and shift all bits to the right to fill the gap in Rust

1 Answer

0 votes
/*
    Removes the bit at the given position and shifts all higher bits right.
*/
fn remove_bit_and_shift(number: i32, position: i32) -> i32 {
    /*
        number = 22 (10110)
        position = 2 (0 = LSB)

        Bits: 1 0 1 1 0
                  ^ remove this bit

        left  = bits above removed bit
        right = bits below removed bit

        result = (left << position) | right
    */

    let left = number >> (position + 1);                 // bits above removed bit
    let right = number & ((1 << position) - 1);          // bits below removed bit

    (left << position) | right                           // merge shifted left + right
}

/*
    Prints a 32-bit binary representation of an integer.
*/
fn print_binary(value: i32) {
    /*
        Uses:
            format!("{:b}", value) → binary string
            pad to 32 bits
            group into 4-bit chunks for readability
    */

    let mut binary = format!("{:b}", value);
    if binary.len() < 32 {
        binary = "0".repeat(32 - binary.len()) + &binary;
    }

    // Group into 4-bit chunks
    for chunk in binary.as_bytes().chunks(4) {
        print!("{} ", std::str::from_utf8(chunk).unwrap());
    }
    println!();
}

fn main() {
    let number: i32 = 22;
    let position: i32 = 2; // remove bit 2 (0 = LSB)

    println!("Original number in binary:");
    print_binary(number);

    let result = remove_bit_and_shift(number, position);

    println!();
    println!(
        "Number after removing bit {} and shifting remaining bits:",
        position
    );
    print_binary(result);

    println!();
    println!("Result as integer: {}", result);
}



/*
run:

Original number in binary:
0000 0000 0000 0000 0000 0000 0001 0110 

Number after removing bit 2 and shifting remaining bits:
0000 0000 0000 0000 0000 0000 0000 1010 

Result as integer: 10

*/

 



answered 1 day ago by avibootz
edited 1 day ago by avibootz

Related questions

...