# semx_bitops
[](https://crates.io/crates/semx_bitops)
[](https://docs.rs/semx_bitops)
位操作原语与动态大小位图,对标 Linux 内核 `<linux/bitops.h>` + `<linux/bitmap.h>`。
`#![no_std]`,依赖 `alloc`(仅 `BitMap`),可在裸机 / 嵌入式 / 内核场景直接使用。
## 功能
- **位操作原语** — `set_bit`、`clear_bit`、`test_bit`、`find_first_bit`、`find_next_zero_bit` 等,操作 `&[usize]` 切片
- **位域提取与插入** — `extract8/16/32/64`、`deposit32/64`
- **位交错** — `half_shuffle32/64`、`half_unshuffle32/64`
- **动态位图 `BitMap`** — 基于 `Vec<usize>` 的变长位图,支持集合运算、区间操作、连续空闲区域查找
## 用法
### 位操作原语
```rust
use semx_bitops::{set_bit, test_bit, find_first_bit};
let mut bits = [0usize; 2];
set_bit(65, &mut bits);
assert!(test_bit(65, &bits));
assert_eq!(find_first_bit(&bits, 128), 65);
```
### 位域操作
```rust
use semx_bitops::{extract32, deposit32};
let val = 0x8000_008Eu32;
assert_eq!(extract32(val, 1, 3), 7);
let val = deposit32(0, 8, 4, 0xA);
assert_eq!(extract32(val, 8, 4), 0xA);
```
### 动态位图
```rust
use semx_bitops::bitmap::BitMap;
let mut bm = BitMap::create(256);
bm.set_range(64, 32);
assert_eq!(bm.count_ones(), 32);
assert_eq!(bm.find_first_bit(), 64);
assert_eq!(bm.find_next_zero_bit(64), 96);
```