2.4 Data Types and Type Annotations
Rust requires that all variables have a well-defined type, which can often be inferred by the compiler.
2.4.1 Basic Data Types
- Integers:
i8
,i16
,i32
,i64
,i128
,isize
(signed);u8
,u16
,u32
,u64
,u128
,usize
(unsigned) - Floating-Point Numbers:
f32
,f64
- Booleans:
bool
- Characters:
char
(4 bytes, Unicode scalar values)
2.4.2 Type Inference
fn main() { let x = 42; // x: i32 inferred let y = 3.14; // y: f64 inferred println!("x = {}, y = {}", x, y); }
2.4.3 Explicit Type Annotation
fn main() { let x: u8 = 255; println!("x = {}", x); }
2.4.4 Comparison with C
In C, you have similar basic types but with different sizes and naming conventions.
int x = 42; // Typically 32 bits
float y = 3.14f; // Single-precision floating point
char c = 'A'; // 1 byte
Note: Rust's integer types have explicit sizes, reducing ambiguity.