Expand description
Type-level unsigned integers.
Type operators implemented:
From ::core::ops: BitAnd, BitOr, BitXor, Shl, Shr, Add, Sub,
Mul, Div, and Rem.
From typenum: Same, Cmp, and Pow.
Rather than directly using the structs defined in this module, it is recommended that you import and use the relevant aliases from the consts module.
§Example
use std::ops::{Add, BitAnd, BitOr, BitXor, Div, Mul, Rem, Shl, Shr, Sub};
use typenum::{Unsigned, U1, U2, U3, U4};
assert_eq!(<U3 as BitAnd<U2>>::Output::to_u32(), 2);
assert_eq!(<U3 as BitOr<U4>>::Output::to_u32(), 7);
assert_eq!(<U3 as BitXor<U2>>::Output::to_u32(), 1);
assert_eq!(<U3 as Shl<U1>>::Output::to_u32(), 6);
assert_eq!(<U3 as Shr<U1>>::Output::to_u32(), 1);
assert_eq!(<U3 as Add<U2>>::Output::to_u32(), 5);
assert_eq!(<U3 as Sub<U2>>::Output::to_u32(), 1);
assert_eq!(<U3 as Mul<U2>>::Output::to_u32(), 6);
assert_eq!(<U3 as Div<U2>>::Output::to_u32(), 1);
assert_eq!(<U3 as Rem<U2>>::Output::to_u32(), 1);Re-exports§
- pub use crate::marker_traits::PowerOfTwo;
- pub use crate::marker_traits::Unsigned;
Structs§
- UInt
- UIntis defined recursively, where- Bis the least significant bit and- Uis the rest of the number. Conceptually,- Ushould be bound by the trait- Unsignedand- Bshould be bound by the trait- Bit, but enforcing these bounds causes linear instead of logrithmic scaling in some places, so they are left off for now. They may be enforced in future.
- UTerm
- The terminating type for UInt; it always comes after the most significant bit.UTermby itself represents zero, which is aliased toU0.
Traits§
- GetBit
- SetBit
- A type operator that, when implemented for unsigned integer N, sets the bit at positionItoB.