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 数据结构
589 每月下载量
30KB
218 代码行
bit_manipulation-rs
一个Rust库,可以操作从u8到u128的无符号整数,允许您设置、清除或检索单个位。
功能
-
位操作:在无符号整数中设置、清除和检索单个位。
-
跨类型支持:与
u8
、u16
、u32
、u64
和u128
类型一起工作。 -
高效存储:通过将位存储为布尔标志来高效地处理位操作。
-
高效实现:利用位运算进行高性能位操作。
-
直观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] 联系我,提出任何额外的请求或您想要添加的功能!