Standard Data Type Limits
Standard variable types and limits.
Numeric Types

Type | Size (in bits) | Format | Minimum Value | Maximum Value | Literal Suffix | Sig. Digits
BYTE | 8 | signed integer | -128 | +127 |  | 2+
UBYTE | 8 | unsigned integer | 0 | +255 |  | 2+
SHORT | 16 | signed integer | -32768 | +32767 |  | 4+
USHORT | 16 | unsigned integer | 0 | 65535 |  | 4+
INTEGER | 32 | signed integer | -2147483648 | +2147483647 | %, l | 9+
UINTEGER | 32 | unsigned integer | 0 | 4294967395 | ul | 9+
LONG | [*] | signed integer | [*] | [*] | & | [*]
ULONG | [*] | unsigned integer | [*] | [*] |  | [*]
LONGINT | 64 | signed integer | -9 223 372 036 854 775 808 | +9 223 372 036 854 775 807 | ll | 18+
ULONGINT | 64 | unsigned integer | 0 | +18 446 744 073 709 551 615 | ull | 19+
SINGLE | 32 | floating point | [**]+/-2.802 597 E-45 | [**]+/-3.402 823 E+38 | !, f | 6+
DOUBLE | 64 | floating point | [**]+/-4.490 656 458 412 465 E-324 | [**]+/-1.797 693 134 862 310 E+308 | # | 15+

[*] `Long` and `Ulong` data types vary with platform. Currently, they are aliases to either `Integer` or `LongInt` and their unsigned versions, respectively.
[**] The minimum and maximum values for the floating-point types `Single` and `Double` are, respectively, the values closest to zero and the values closest to positive and negative infinity.
String Types

Type | Character Size (in bytes) | Minimum Size (in characters) | Maximum Size (in characters) | Literal Suffix
String | 1 | 0 | [**]+2147483647 | $
Zstring | 1 | 0 | [**]+2147483647 | [N/A]
Wstring | [*] | [*]0 | [*,**]+2147483647 | [N/A]

[*] Unicode, or "wide", characters vary in both size and availability with platform.
[**] All runtime library string procedures take and produce `Integer` values for sizes and positions. The actual maximum size will vary (smaller) with storage location and/or platform.
Arrays

Maximum Subscript Range | Maximum Elements per Dimension | Minimum/Maximum Dimensions | Maximum Size (in bytes)
[*][-2147483648, +2147483647] | [*]+2147483647 | 1/9 | [*]+2147483647

[*] All runtime library array procedures take and produce `Integer` values for subscripts and indexes. The actual limits will vary (smaller) with the number of dimensions, element size, storage location and/or platform.
See also
ProPgIdentifierRules usage of suffixes for variables
ProPgLiterals usage of suffixes for literals / numbers