Standard data type: 32-bit or 64-bit signed, same size as
SizeOf(Any Ptr)
Syntax
Dim variable As Integer
Dim variable As Integer<bits>
Parameters
bits
A numeric constant expression indicating the size in bits of integer desired. The values allowed are 8, 16, 32, 64 or 128.
Description
Integer is the main data type FreeBASIC uses for integer math and bitwise operations. It is the default type for number literals.
In the first form Integer is a 32-bit or 64-bit signed whole-number data type, depending on the target platform.
If an explicit bit size is given (the second form), the data type uses the requested signed integer width.
Integer<128> holds values from -2^127 through 2^127-1. The selected data type is
Byte for
Integer<8>,
Short for
Integer<16>,
Long for
Integer<32> and
LongInt for
Integer<64>.
Integer<128> is a distinct 16-byte scalar type.
LLVM emits native i128 arithmetic and bitwise operations; ABS and SGN use the two-word runtime helper. On 32-bit targets, LLVM also uses runtime helpers for conversions between floating-point values and 128-bit integers. GCC and Clang use native `
int128` on targets that support it, with ABS and SGN using that same helper. On 32-bit targets, they use a two-word type and lower arithmetic through the runtime. Its alignment is 16 bytes except on Windows CE (8 bytes) and classic m68k targets (2 bytes). C interop must use that structure layout; a native `int128` declaration is compatible only when the compiler supports it and uses a matching ABI.
On 32-bit Windows, the GAS backend keeps the four-byte stack ABI for local variables. UDT field offsets still use 16-byte alignment, but C code receiving a pointer to such a local must accept its four-byte alignment. The runtime helpers accept unaligned storage.
The native GAS and GAS64 backends lower arithmetic through the runtime library. GAS32 passes 128-bit arguments as 16-byte stack copies and returns values through a hidden result pointer, matching the i386 ABI for the aligned two-word C structure. GAS64 uses the SysV two-register ABI where available and stack arguments when those registers are exhausted. The GAS64 non-SysV path passes the 16-byte value through a caller-owned copy and returns through a hidden result pointer.
Example
#ifdef __FB_64BIT__
Dim x As Integer = &H8000000000000000
Dim y As Integer = &H7FFFFFFFFFFFFFFF
Print "Integer Range = "; x; " to "; y
#else
Dim x As Integer = &H80000000
Dim y As Integer = &H7FFFFFFF
Print "Integer Range = "; x; " to "; y
#endif
Dialect Differences
- In the -lang fb and -lang fblite dialects, the Integer data type is 32-bit or 64-bit depending on target platform
- In the -lang qb dialect, the Integer data type is 16-bit, regardless of platform.
Differences from QB
- The ability to select a bit size is new to FreeBASIC
- The INTEGER type is always 16 bits wide in QB.
See also