Under heavy development. This site describes the intended 1.0 language. Current features and performance vary. Development status
Sn50SnThe SnAPI programming language
Development · Evolving reference

i64

64-bit signed integer: -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807.

Sn is under heavy development. This reference includes the intended 1.0 design; features may be incomplete in the current compiler. Read the status →

These examples describe the Development language contract. They are not a claim that every workflow is supported by the current public preview. Declaration excerpts belong inside a function unless a full module is shown.

Range and representation

i64 is a fixed-width signed two’s-complement integer. Its width does not depend on pointer size.

Range and representation
PropertyValue
Storage64 bits / 8 bytes
Minimum-9,223,372,036,854,775,808
Maximum9,223,372,036,854,775,807
let Minimum: i64 = -9223372036854775808_i64;
let Maximum: i64 = 9223372036854775807_i64;

Literals and inference

A fitting integer literal can take i64 from context; _i64 selects it explicitly. Unconstrained integer literals default to i32; an explicit suffix removes that ambiguity. Decimal, binary, octal and hexadecimal integer spellings are available. An out-of-range literal is a compile-time error; even an unsigned literal does not silently wrap.

let Count: i64 = 42;
let Explicit = 42_i64;
let Bits: i64 = 0x2A;
// Rejected: let Outside: i64 = 9223372036854775808;

Arithmetic, bits and failure

Ordinary addition, subtraction and multiplication fatal-trap on overflow. Negating the minimum value also fatal-traps. Division truncates toward zero; remainder has the dividend’s sign or is zero. Minimum / -1 and minimum % -1 fatal-trap. Division or remainder by zero fatal-traps. .CheckedAdd, .CheckedSub and .CheckedMul return an optional result. +%, -%, *% select wrapping; +|, -|, *| select saturation. Bitwise operations and shifts are supported. Ordinary shift counts must be 0 through 63; right shift sign-fills.

let Maximum: i64 = 9223372036854775807_i64;
let Missing: i64? = Maximum.CheckedAdd(1); // none
let Clamped: i64 = Maximum +| 1; // Maximum
let Wrapped: i64 = Maximum +% 1; // -9223372036854775808
let Bits: i64 = 1_i64 << 2; // 4

Conversions and mixed expressions

Implicit widening stays within the signed family. There is no implicit signed/unsigned or integer/float conversion. Explicit as checks the destination range and fatal-traps on failure; as? returns none instead. Narrowing never silently truncates. Binary operations use a common reachable same-family type; compound assignment keeps its left type.

let Value: i64 = -42;
let Wider: i128 = Value; // Exact implicit widening.
let Restored: i64? = Wider as? i64;

See all primitive types and literals and user-defined suffixes.

Documentation snapshot: October 24, 2026 About versions ↗
Searching Development · language & standard library