Integers

There are five signed integer types, and five unsigned integer types:

Type Length Minimum Value Maximum Value
Int8 8 -128 127
Int16 16 −32,768 32,767
Int32 32 −2,147,483,648 2,147,483,647
Int64 64 −263 263 - 1
Int128 128 −2127 2127 - 1
UInt8 8 0 255
UInt16 16 0 65,535
UInt32 32 0 4,294,967,295
UInt64 64 0 264 - 1
UInt128 128 0 2128 - 1

An integer literal is an optional + or - sign, followed by a sequence of digits and underscores, optionally followed by a suffix. If no suffix is present, the literal’s type is the lowest between Int32, Int64 and UInt64 in which the number fits (at the moment, 128 bit integers must always be suffixed):

  1. 1 # Int32
  2. 1_i8 # Int8
  3. 1_i16 # Int16
  4. 1_i32 # Int32
  5. 1_i64 # Int64
  6. 1_i128 # Int128
  7. 1_u8 # UInt8
  8. 1_u16 # UInt16
  9. 1_u32 # UInt32
  10. 1_u64 # UInt64
  11. 1_u128 # UInt128
  12. +10 # Int32
  13. -20 # Int32
  14. 2147483648 # Int64
  15. 9223372036854775808 # UInt64

The underscore _ before the suffix is optional.

Underscores can be used to make some numbers more readable:

  1. 1_000_000 # better than 1000000

Binary numbers start with 0b:

  1. 0b1101 # == 13

Octal numbers start with a 0o:

  1. 0o123 # == 83

Hexadecimal numbers start with 0x:

  1. 0xFE012D # == 16646445
  2. 0xfe012d # == 16646445