Numeric types - The Rust Reference (original) (raw)
Keyboard shortcuts
Press ← or → to navigate between chapters
Press S or / to search in the book
Press ? to show this help
Press Esc to hide this help
The Rust Reference
Numeric types
Integer types
The unsigned integer types consist of:
| Type | Minimum | Maximum |
|---|---|---|
| u8 | 0 | 28-1 |
| u16 | 0 | 216-1 |
| u32 | 0 | 232-1 |
| u64 | 0 | 264-1 |
| u128 | 0 | 2128-1 |
The signed two’s complement integer types consist of:
| Type | Minimum | Maximum |
|---|---|---|
| i8 | -(27) | 27-1 |
| i16 | -(215) | 215-1 |
| i32 | -(231) | 231-1 |
| i64 | -(263) | 263-1 |
| i128 | -(2127) | 2127-1 |
Floating-point types
The IEEE 754-2008 “binary32” and “binary64” floating-point types are f32 andf64, respectively.
Machine-dependent integer types
The usize type is an unsigned integer type with the same number of bits as the platform’s pointer type. It can represent every memory address in the process.
Note
While a
usizecan represent every address, converting a pointer to ausizeis not necessarily a reversible operation. For more information, see the documentation for type cast expressions, std::ptr, and provenance in particular.
The isize type is a signed integer type with the same number of bits as the platform’s pointer type. The theoretical upper bound on object and array size is the maximum isize value. This ensures that isize can be used to calculate differences between pointers into an object or array and can address every byte within an object along with one byte past the end.
usize and isize are at least 16-bits wide.
Note
Many pieces of Rust code may assume that pointers,
usize, andisizeare either 32-bit or 64-bit. As a consequence, 16-bit pointer support is limited and may require explicit care and acknowledgment from a library to support.
Bit validity
For every numeric type, T, the bit validity of T is equivalent to the bit validity of [u8; size_of::<T>()]. An uninitialized byte is not a valid u8.