C/C++ Programmer's Guide (G06.27+, H06.08+, J06.03+)

RangeSize (bits)Designation
-2,147,483,648 to 2,147,483,64732signed long
0 to 4,294,967,29532unsigned long
The result of converting an integer to a shorter signed integer is undefined and may result in
arithmetic overflow.
The result of converting an unsigned integer to a signed integer of equal length is undefined and
may result in arithmetic overflow.
The result of bitwise operations on signed integers is the same as the result for unsigned integers,
except for the right shift.
The result of a right shift of a negative-valued signed integral type is an arithmetic right shift for
signed numbers and logical right shift for unsigned numbers.
The remainder on integer division has a positive sign (+).
G.3.6 Floating Point
This subsection applies only to Tandem floating-point format. The scaled value of a floating constant
that is in the range of the representable value for its type is the larger representable value
immediately adjacent to the nearest representable value.
This table describes the amount of storage and the range of various types of floating-point numbers.
RangeSize(bits)Designation
8.63617e-78 to 1.15792e7732float
8.6361685550944446e-78 to
1.1579208923716189e77
64double
8.6361685550944446e-78 to
1.1579208923716189e77
64long double
When an integral number is converted to a floating-point number that cannot exactly represent the
original value, the direction of truncation is up.
When a floating-point number is converted to a narrower floating-point number, the direction of
truncation, or rounding is up.
G.3.7 Arrays and Pointers
An unsigned long integer is required to hold the maximum size of an array, that is the type of
the size of operator size_t.
32 bits is the size of the integer required for a pointer to be converted to an integral type.
Casting a pointer to an integer returns: "Warning 32: invalid conversion specified." Casting an
integer to a pointer works without error or warning.
An integer of type long is required to hold the difference between two pointers to members of the
same array, ptrdiff_t.
G.3.8 Registers
The register storage class specifier has no effect on the actual storage of objects in registers.
G.3.9 Structures, Unions, Enumerations and Bit Fields
If a member of a union object is accessed using a member of a different type, the member is
automatically cast to the type of the destination, as long as the conversion is valid. In other words,
it works the same as conversions between variables that are not union members.
Implementation-Defined Behavior of TNS C 409