# Types

## Numeric types

Rox supports the following numeric types:

• integer is an unsized integer. An unsized integer can be arbitrarily large, but it cannot be written directly to an output. However, the conversion from unsized integers to sized integers is automatic.
• unsigned(n) is an unsigned number of size n, where n≥0. Addition of unsigned numbers is wrapping addition, that is, only the least-significant n bits of the answer are retained.
• signed(n) is a signed number of size n, where n≥0.
• rational is a rational number with arbitrarily large numerator and denominator.
• float is a floating-point number that can be used in internal expressions.

rational and float cannot be used as inputs or outputs. Currently there is very little you can do with them. Eventually, they will be usable to generate constant lookup tables in Rox without needing external tools.

## Boolean values

Relational expressions in Rox produce a value of type bit. A bit value can be either false or true.

## Type aliases

It is easy to create type aliases in Rox. This statement

u6 = unsigned(6);


creates an alias of the unsigned(6) type. The identifier u6 can be used anywhere the unsigned(6) type specifier can be used. Rox provides a type alias of its own; bit is an alias for unsigned(1), and false and true are constants of type bit with values 0 and 1 respectively.

## More comlex types

Eventually, Rox will also support arrays, structure types, and enumerated types, but they have not been implemented yet.