uint256

uint256 is not implemented in the current release.
PropertyValue
Size32 bytes (256 bits)
Minimum value0
Maximum value2256−1 ≈ 1.157921 × 1077
Literal suffixu256
RepresentationBinary, wraps modulo 2256
Hardware supportSoftware-emulated on all targets

uint256 is a big-integer type for cryptographic values — a fixed-width type whose size is identical on every target platform. It stores non-negative values in plain binary and wraps modulo 2256 on overflow. No mainstream CPU has native 256-bit arithmetic, so every operation is software-emulated; reach for it when correctness and portability matter more than raw throughput.

Literals

let a: uint256 = 1;  // explicit annotation
let b = 42u256;      // type suffix

If a literal value does not fit in uint256, the compiler emits an error at compile time. See Literals for decimal, hexadecimal, octal, and binary forms.

Typical Use Cases

  • Cryptographic hashes (SHA-256 output)
  • Ethereum-style addresses and balances

Arithmetic

OperatorDescriptionCompound
+Addition+=
-Subtraction-=
*Multiplication*=
/Division/=
%Remainder%=
**Exponentiationn/a
let a: uint256 = 10;
let b: uint256 = 3;

let sum  = a + b;   // 13
let quot = a / b;   // 3   truncates toward zero
let rem  = a % b;   // 1   always non-negative

Division truncates toward zero. Because unsigned values are never negative, both the quotient and the remainder are always non-negative.

Overflow. Unsigned arithmetic wraps modulo 2256 in both debug and release builds — it never triggers a fatal error. Subtracting past zero wraps to a large value rather than going negative (0 - 1 yields 2256−1), so prefer a signed type for any value that can legitimately fall below zero.

Comparison

OperatorDescriptionResult
==Equalbool
!=Not equalbool
<Less thanbool
<=Less than or equalbool
>Greater thanbool
>=Greater than or equalbool

Both operands must have the same type. Comparing uint256 with another integer type — or with a signed type such as int256 — is a compile-time error; cast one operand explicitly first.

Shift and Bitwise

Right shift on an unsigned value is logical: the vacated high bits are filled with zeros, never a sign bit. Left shift likewise fills the vacated low bits with zeros.

let u: uint256 = 20;  // 0b00010100
let l = u << 2;       // 80   logical left shift
let r = u >> 2;       //  5   logical right shift, zero-filled

Unsigned types are the natural home for bit manipulation; the operators & (AND), | (OR), ^ (XOR), and ~ (NOT) are all defined.

let a: uint256 = 0b1100;  // 12
let b: uint256 = 0b1010;  // 10
let and = a & b;          // 0b1000 = 8
let or  = a | b;          // 0b1110 = 14
let xor = a ^ b;          // 0b0110 = 6

Conversion

Rux performs no implicit numeric conversions — every conversion uses the as operator. Widening zero-extends, preserving the value; narrowing keeps only the low-order bits; a same-width unsigned↔signed cast reinterprets the bit pattern.

let x: uint256 = 1;
let wide  = x as uint512;  // 1   zero-extended, value preserved
let small = x as uint64;   // 1   narrowed, low 64 bits kept
let s     = x as int256;   // 1   same width, bits reinterpreted

See Also