How to create a bitset in Rust

1 Answer

0 votes
struct BitSet {
    bits: Vec<u8>,
    size: usize,
}

impl BitSet {
    fn new(size: usize) -> Self {
        let num_bytes = (size + 7) / 8; // Calculate the number of bytes needed
        BitSet {
            bits: vec![0; num_bytes],
            size,
        }
    }

    fn set(&mut self, index: usize) {
        if index < self.size {
            let byte_index = index / 8;
            let bit_index = index % 8;
            self.bits[byte_index] |= 1 << bit_index;
        }
    }

    fn clear(&mut self, index: usize) {
        if index < self.size {
            let byte_index = index / 8;
            let bit_index = index % 8;
            self.bits[byte_index] &= !(1 << bit_index);
        }
    }

    fn is_set(&self, index: usize) -> bool {
        if index < self.size {
            let byte_index = index / 8;
            let bit_index = index % 8;
            (self.bits[byte_index] & (1 << bit_index)) != 0
        } else {
            false
        }
    }

    // Function to print the bitset as 0s and 1s in reverse order
    fn print(&self) {
        for i in (0..self.size).rev() { // Iterate in reverse order
            print!("{}", if self.is_set(i) { "1" } else { "0" });
        }
        println!();
    }
}

fn main() {
    let mut bitset = BitSet::new(16);
    bitset.set(3);
    bitset.set(7);
    bitset.set(15);

    println!("BitSet:");
    bitset.print();

    bitset.clear(7);
    println!("BitSet after clearing bit 7:");
    bitset.print();
}

 
 
/*
run:
 
BitSet:
1000000010001000
BitSet after clearing bit 7:
1000000000001000

*/

 



answered May 7 by avibootz
...