## 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`

is defined recursively, where`B`

is the least significant bit and`U`

is the rest of the number. Conceptually,`U`

should be bound by the trait`Unsigned`

and`B`

should 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.- The terminating type for
`UInt`

; it always comes after the most significant bit.`UTerm`

by itself represents zero, which is aliased to`U0`

.

## Traits

- A
**type operator**that, when implemented for unsigned integer`N`

, sets the bit at position`I`

to`B`

.

## Type Definitions

- Alias for the result of calling
`SetBit`

:`SetBitOut<N, I, B> = <N as SetBit<I, B>>::Output`

.