5.7 Numeric Literals
Numeric literals allow you to specify fixed numeric values directly in your source code.
-
Integer Literals:
- Default to
i32if the type cannot be inferred otherwise from context. - Can use underscores
_as visual separators for readability (e.g.,1_000_000). These are ignored by the compiler. - Can have type suffixes to specify the exact integer type:
10u8,20i32,30usize. - Supports different bases using prefixes:
- Decimal:
98_222(no prefix) - Hexadecimal:
0xff(prefix0x) - Octal:
0o77(prefix0o) - Binary:
0b1111_0000(prefix0b)
- Decimal:
- Byte literals represent single bytes (
u8) using ASCII values:b'A'(theu8value 65).
- Default to
-
Floating-Point Literals:
- Default to
f64(double precision). - Can use underscores:
1_234.567_890. - Requires a digit before a decimal point (
0.5, not.5). - A trailing decimal point is allowed (
1., equivalent to1.0). - Can use exponent notation (
eorE):1.23e4(1.23 * 10^4),0.5E-2(0.5 * 10^-2). - To specify
f32(single precision) when the type cannot be inferred from context, use thef32suffix:2.0f32.
- Default to
fn main() { let decimal = 100_000; // i32 by default let hex = 0xEADBEEF; // i32 by default let octal = 0o77; // i32 by default let binary = 0b1101_0101; // i32 by default let byte = b'X'; // u8 (value 88) let float_def = 3.14; // f64 by default let float_f32 = 2.718f32; // f32 explicit suffix let float_exp = 6.022e23; // f64 println!("Dec: {}, Hex: {}, Oct: {}, Bin: {}, Byte: {}", decimal, hex, octal, binary, byte); println!("f64: {}, f32: {}, Exp: {}", float_def, float_f32, float_exp); // Type inference example: let values: [f32; 3] = [1.0, 2.0, 3.0]; //Lit. are known to be f32 from array type let sum = values[0] + 0.5;//0.5 here must be f32 due to context, suffix not needed println!("Sum (f32): {}", sum); let value_f64 = 1.0; // f64 // let mixed_sum = values[0] + value_f64; // Error: mismatched types f32 and f64 }
If the compiler cannot unambiguously determine the required numeric type from the context (e.g., assigning to an untyped variable, or initial parsing), you must provide either a type suffix on the literal or a type annotation on the variable.