C++ has four fundamental types to represent integers of different sizes:
char, short, int, and long.
For each of these types, there is a corresponding
unsigned type to represent unsigned integer with the same number
of bits as the plain (signed) type.
It is required that unsigned integers obey the laws of
arithmetic modulo 2^n, where n is the number of bits in the
representation (see Section 3.6.1 of [Ellis-Stroustrup90]).
However, the signed types have an infinite number of abstract values,
most of which are not representable on a computer.
One has to use range assertions (e.g., inRange or comparisons
to such limits as INT_MIN and INT_MAX)
if one wishes to ensure that the abstract value is representable.
In this section we describe the abstract values of C++ integer types,
by giving the traits used to model them in Larch/C++.
The common foundation for the various integer traits
is the trait Integer found in the LSL Handbook
(Appendix A of [Guttag-Horning93]).
This trait defines unbounded integers
with usual integer operations (+, -, *, div,
mod, etc.).
See section 4.13 Literals for the syntax of literals that denote abstract values of the sorts specified here.
Go to the first, previous, next, last section, table of contents.