Integer Types

Felix supports several families of integer types.

Integers Types

Platform variant integer types are based on C integer types whose sizes vary from platform to platform. In the tables below, the suffix is appended to a plain integer literal as a type modifier. The suffix letters can be in any order and can be upper or lower case.

ISO C Signed Integer Types

The size in bytes on Windows 32 and 64 bit platforms and Unix 32 and 64 bit platfoms is indicated.

Felix C Suffix W32 W64 U32 U64
tiny signed char t 1 1 1 1
short short s 2 2 2 2
int int   2 2 4 4
long long l 4 4 4 8
vlong long long vl,lv 8 8 8 8

Int type may also use i suffix.

ISO C Unsigned Integer Types

All unsigned integer types provide a range of values from 0 to \(256^n-1\) for some n. The size in bytes is the same as the corresponding signed type.

Felix C Suffix
utiny usigned char ut
ushort unsigned short us
uint unsigned int u
ulong unsigned long ul
uvlong unsigned long long uvl,ulv

ISO C and Posix Aliases

Felix C Suffix
intmax intmax_t j
uintmax uintmax_t uj
ssize ssize_t z
size size_t uz
intptr intptr_t p
uintptr uintptr_t up
ptrdiff ptrdiff_t d
uptrdiff uptrdiff_t ud

The intmax and uintmax types are 8 bytes on Windows and Unix platforms. The other types are all the same as the machine word size, either 4 or 8 bytes.

Exact Signed Integer Types

Felix C Suffix
int8 int8_t i8
int16 int16_t i16
int32 int32_t i32
int64 int64_t i64

Exact Unigned Integer Types

Felix C Suffix
uint8 uint8_t u8
uint16 uint16_t u16
uint32 uint32_t u32
uint64 uint64_t u64

Integer Literals

An integer literal consists of an optional radix indicator, a string of digits with possible embedded spacers, and an optional suffix.

Radices

Felix supports 4 radices.

Radix Prefix Digits
Hex 0x 0123456789abcdefABCDEF
Decimal 0d 0123456789
Octal 0o 01234567
Binary 0b 01

If omitted decimal radix if used. Radix letter may be upper or lower case. Note, in Felix a leading zero digit does not imply octal radix as in C.

Spacers

Integers allow an underscore between digits, after the radix specifier if one is given, or before the suffix specifier, if one is given.

Operations

All Integers

All integer types support the following operations.

Operation Operator
Addition infix +
Subtraction infix -
Multiplication infix *
Division infix /
Remainder infix %
Left Shift infix <<
Right Shift infix >>

Left and right shifts are defined as multiplication by positive or negative powers of 2, respectively.

Signed Integers Only

Operation Operator
Negation prefix -, neg
Sign sgn
Absolute Value abs

The sgn operator returns -1 for negative, 0 for zero, and 1 for positive.

Unsigned Integer Only

These operations are bitwise logic operations. They are not available for signed integers.

Operation Operator
ones complement ~
bitand infix \&
bitor infix \|
bitxor infix \^