#bit #intuitive #clear #state #bit-set #check #smoothing

bit_manipulation

bit_manipulation: 一个轻量级的Rust crate,用于无缝管理和验证多达128个选项状态。通过高效、灵活且直观的选项处理功能,增强您的应用程序,确保平滑的激活检查和操作。

12次发布

0.2.40 2024年5月4日
0.2.35 2024年5月1日
0.2.25 2024年4月30日
0.1.2 2024年4月27日

1056 in 数据结构

Download history 348/week @ 2024-04-23 660/week @ 2024-04-30 6/week @ 2024-05-07 1/week @ 2024-05-14 5/week @ 2024-05-21 1/week @ 2024-06-11

589 每月下载量

MIT 许可证

30KB
218 代码行

bit_manipulation-rs

一个Rust库,可以操作从u8到u128的无符号整数,允许您设置、清除或检索单个位。

功能

  • 位操作:在无符号整数中设置、清除和检索单个位。

  • 跨类型支持:与 u8u16u32u64u128 类型一起工作。

  • 高效存储:通过将位存储为布尔标志来高效地处理位操作。

  • 高效实现:利用位运算进行高性能位操作。

  • 直观API:提供直观的API,用于处理u8..u128,使它易于集成到您的Rust项目中。

函数

new() -> Bits

创建一个新的Bits实例,所有位最初都设置为0。

is_bit_on(bit: u8) -> bool

检查指定的位是开启(1)还是关闭(0)。

返回

  • 如果位已设置,则返回true,否则返回false。

are_bits_on(bits: &Vec) -> &Vec

检查多个指定的位是开启(1)还是关闭(0)。

返回

  • 一个引用到向量,其中包含布尔值,表示存储值中每个对应的位是否已成功清除(false)或未清除(true)。

set_bit(bit: u8) -> bool

在由Bits结构表示的无符号整数值中设置指定的位。
位参数指示要设置的位的位置,从0开始,对于最低有效位。

注意
位参数可以具有的最大值取决于基本类型T。
例如,如果T是u8,则位参数的最大有效值将是7(因为u8有8位,索引从0到7)。
尝试使用大于最大有效索引的值设置位将导致函数返回false,而不会修改Bits结构的状态。

返回

  • 操作成功时为 true,否则为 false。

set_bits(bits: &Vec) -> &Vec

设置 Bits 结构体表示的无符号整数值中的多个指定位。

注意
每个位可以具有的最大值取决于基本类型 T。
例如,如果T是u8,则位参数的最大有效值将是7(因为u8有8位,索引从0到7)。
尝试设置比最大有效索引值更高的位将导致函数忽略并继续设置有效位。

返回

  • 一个引用到向量,其中包含布尔值,表示存储值中每个对应的位是否已成功清除(false)或未清除(true)。

clear_bit(bit: u8) -> bool

清除指定的位,将其设置为 0。

返回

  • 操作成功时为 true,否则为 false。

clear_bits(bits: &Vec) -> &Vec

清除类型 T 的值中的指定位,其中 T 预期是以下之一:u8、u16、u32、u64 或 u128。只有位于类型 T 最大值范围内的位将被清除。例如,如果基本类型是 u8 并且方法调用时传递了向量引用 [1, 5, 10],则只清除位置 1 和 5 的位,因为 u8 没有第 10 位。

返回

  • 一个引用到向量,其中包含布尔值,表示存储值中每个对应的位是否已成功清除(false)或未清除(true)。

clear_all_bits()

清除所有位,将其设置为 0。

get_value() -> T

返回

  • 当前 T 无符号整数的值。

get_all_bits() -> &Vec

返回

  • 表示所有位状态的向量的引用。

set_all_flags()

将所有位设置为 1,有效地将值设置为给定类型 T 的最大可能值。

用法

use bit_manipulation::Bits;

fn main() {
    // Create a new bit set for u8 integers
    let mut bits: Bits<u8> = Bits::new();

    // Try to set a bit that exceeds the size of the integer
    let set_success = bits.set_bit(10);

    // Check if the bit is on (should be false)
    assert!(!bits.is_bit_on(10));
    
    // Check if the operation was successful
    assert!(!set_success);

    // Try to clear a bit that exceeds the size of the integer
    let clear_success = bits.clear_bit(10);

    // Check if the bit is off (should be false)
    assert!(!bits.is_bit_on(10));
    
    // Check if the operation was successful
    assert!(!clear_success);
}

use bit_manipulation::bit_manipulation::Bits;

fn main() {
    // Create a new bit set for u8 integers
    let mut bits: Bits<u8> = Bits::new();

    // Try to set a bit that exceeds the size of the integer
    let operation_success = bits.set_bit(10);

    // Check if the bit is on (should be false)
    assert!(!bits.is_bit_on(10));

    // Check if the operation was successful
    assert!(!operation_success);
}
use bit_manipulation::bit_manipulation::Bits;

fn main() {
    // Create a new bit set for u8 integers
    let mut bits: Bits<u8> = Bits::new();
    let arr = vec![1, 3, 5, 2, 65];

    // Set multiple bits
    bits.set_bits(&arr);

    // Check if specific bits are on
    let activated_bits = bits.are_bits_on(&arr);
    assert_eq!(activated_bits, &vec![false, true, true, true, false, true, false, false]);

    // Clear all bits
    bits.clear_all_bits();

    // Check if all bits are cleared
    assert_eq!(bits.get_value(), 0);
}

支持

您可以通过 [email protected] 联系我,提出任何额外的请求或您想要添加的功能!

无运行时依赖