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

.