bit_ops 0.2.4

Common bit-oriented operations on primitive integer types with a focus on `no_std` and `const` compatibility. Unlike other crates that provide tooling to create sophisticated high-level types with bitfields, the focus of `bit_ops` is on raw primitive integer types.
Documentation
# Changelog of `bit_ops`

## Unreleased

## v0.2.4 - 2026-07-05

- Trait `Uint` is now sealed. It was never intended to be used outside of this
  crate.
- Bit span operations now panic consistently when `bits + shift` exceeds the
  underlying integer width. This affects `toggle_bits`, `set_bits`,
  `set_bits_n`, `set_bits_exact`, `set_bits_exact_n`, and `get_bits` in the
  function API and the corresponding `BitOps` trait methods.
- Empty bit spans now consistently allow a shift equal to the integer width.
  This affects the same functions.


## v0.2.3 - 2025-11-15

- Add `BitposIteratorExt`: use `.bit_positions()` in an iterator to conveniently
  create a `BitmapIter`
- Improved documentation


## v0.2.2 - 2025-11-13

- Improved documentation


## v0.2.1 - 2025-11-13

- Improved implementation of `BitmapIter` significantly (50% performance gain)


## v0.2.0 - 2025-11-13

- **Breaking**: Rust edition 2024, MSRV is now 1.85.1
- Added `BitsIter` and `BitmapIter` to iterate set bits in unsigned integers
  and bitmaps.
- Documentation fixes


## v0.1.16 - 2025-06-01

- Added `set_bit_exact` which allows setting a bit to an exact value.
  The existing `set_bit` can only set a bit to `1`.


## v0.1.15 - 2025-01-07

- Improved documentation


## v0.1.14 - 2025-01-07

- Improved documentation


## v0.1.13 - 2024-08-24

- Metadata changes


## v0.1.12 - 2024-08-07

- Added the `#![no_std]` attribute to the crate. During early development, I
  probably removed this for easier debugging and then this embarrassing mistake
  happened.. 🤦😅  Now the crate is really `no_std` - as promised!


## v0.1.11 - 2024-07-30

- Functions `set_bits_n` and `set_bits_exact_n` are now `const` compatible


## v0.1.9, v0.1.10 - 2024-07-30

- Removed `create_shifted_mask` as `create_mask() << 5` is a trivial replacement
- Renamed `toggle` to `toggle_bit`
- Added `toggle_bits`


## v0.1.8 - 2024-07-15

- Added `get_bit` function that is like `is_set` but returns an integer instead
  of a boolean


## v0.1.1 - v0.1.7 - 2024-07-13

- Doc fixes
- Trait API: add `#[inline]` and `#[must_use]` to each function impl


## v0.1.0 - 2024-07-13

Initial release.