Bit numberings of any given data element depend on the architecture in use: SPARCstation(TM) machines use bit 0 as the least significant bit, with byte 0 being the most significant byte. The tables in this section describe the various representations.
Integer types used in ANSI C are short, int, long, and long long:
Table A-2 Representation of short|
Bits |
Content |
|---|---|
|
8 - 15 |
Byte 0 (SPARC) Byte 1 (Intel) |
|
0 - 7 |
Byte 1 (SPARC) Byte 0 (Intel) |
Table A-3 Representation of int
|
Bits |
Content |
|---|---|
|
24 - 31 |
Byte 0 (SPARC) Byte 3 (Intel) |
|
16 - 23 |
Byte 1 (SPARC) Byte 2 (Intel) |
|
8 - 15 |
Byte 2 (SPARC) Byte 1 (Intel) |
|
0 - 7 |
Byte 3 (SPARC) Byte 0 (Intel) |
Table A-4 Representation of long on Intel and SPARC v8 versus SPARC v9
|
Bits |
Content |
|---|---|
|
24 - 31 |
Byte 0 (SPARC) v8 Byte 4 (SPARC) v9 Byte 3 (Intel) |
|
16 - 23 |
Byte 1 (SPARC) v8 Byte 5 (SPARC) v9 Byte 2 (Intel) |
|
8 - 15 |
Byte 2 (SPARC) v8 Byte 6 (SPARC) v9 Byte 1 (Intel) |
|
0 - 7 |
Byte 3 (SPARC) v8 Byte 7 (SPARC) v9 Byte 0 (Intel) |
Table A-5 Representation of long long [long long is not available in -Xc mode.]
|
Bits |
Content |
|---|---|
|
56 - 63 |
Byte 0 (SPARC) Byte 7 (Intel) |
|
48 - 55 |
Byte 1 (SPARC) Byte 6 (Intel) |
|
40 - 47 |
Byte 2 (SPARC) Byte 5 (Intel) |
|
32 - 39 |
Byte 3 (SPARC) Byte 4 (Intel) |
|
24 - 31 |
Byte 4 (SPARC) Byte 3 (Intel) |
|
16 - 23 |
Byte 5 (SPARC) Byte 2 (Intel) |
|
8 - 15 |
Byte 6(SPARC) Byte 1 (Intel) |
|
0 - 7 |
Byte 7 (SPARC) Byte 0 (Intel) |
float, double, and long double data elements are represented according to the ANSI/ISO IEEE 754-1985 standard. The representation is:
(-1)s(e - bias)¥2 j.f
where:
s = sign
e = biased exponent
j is the leading bit, determined by the value of e. In the case of long double (Intel), the leading bit is explicit; in all other cases, it is implicit.
f = fraction
u means that the bit can be either 0 or 1.
The following tables show the position of the bits.
Table A-6 float Representation|
Bits |
Name |
|---|---|
|
31 |
Sign |
|
23 - 30 |
Exponent |
|
0 - 22 |
Fraction |
Table A-7 double Representation
|
Bits |
Name |
|---|---|
|
63 |
Sign |
|
52 - 62 |
Exponent |
|
0 - 51 |
Fraction |
Table A-8 long double Representation (SPARC)
|
Bits |
Name |
|---|---|
|
127 |
Sign |
|
112 - 126 |
Exponent |
|
0 - 111 |
Fraction |
Table A-9 long double Representation (Intel)
|
Bits |
Name |
|---|---|
|
80 - 95 |
Unused |
|
79 |
Sign |
|
64 - 78 |
Exponent |
|
63 |
Leading bit |
|
0 - 62 |
Fraction |
For further information, refer to the Numerical Computation Guide.
float and double numbers are said to contain a "hidden," or implied, bit, providing for one more bit of precision than would otherwise be the case. In the case of long double, the leading bit is implicit (SPARC) or explicit (Intel); this bit is 1 for normal numbers, and 0 for subnormal numbers.
Table A-10 float Representations|
normal number (0<e<255): |
(-1)Sign2 (exponent - 127)1.f |
|
subnormal number (e=0, f!=0): |
(-1)Sign2 (-126)0.f |
|
zero (e=0, f=0): |
(-1)Sign0.0 |
|
signaling NaN |
s=u, e=255(max); f=.0uuu-uu; at least one bit must be nonzero |
|
quiet NaN |
s=u, e=255(max); f=.1uuu-uu |
|
Infinity |
s=u, e=255(max); f=.0000-00 (all zeroes) |
Table A-11 double Representations
|
normal number (0<e<2047): |
(-1)Sign2 (exponent - 1023)1.f |
|
subnormal number (e=0, f!=0): |
(-1)Sign2 (-1022)0.f |
|
zero (e=0, f=0): |
(-1)Sign0.0 |
|
signaling NaN |
s=u, e=2047(max); f=.0uuu-uu; at least one bit must be nonzero |
|
quiet NaN |
s=u, e=2047(max); f=.1uuu-uu |
|
Infinity |
s=u, e=2047(max); f=.0000-00 (all zeroes) |
Table A-12 long double Representations
|
normal number (0<e<32767): |
(-1)Sign2 (exponent - 16383)1.f |
|
subnormal number (e=0, f!=0): |
(-1)Sign2 (-16382)0.f |
|
zero (e=0, f=0): |
(-1)Sign0.0 |
|
signaling NaN |
s=u, e=32767(max); f=.0uuu-uu; at least one bit must be nonzero |
|
quiet NaN |
s=u, e=32767(max); f=.1uuu-uu |
|
Infinity |
s=u, e=32767(max); f=.0000-00 (all zeroes) |
The following tables show the hexadecimal representations.
Table A-13 Hexadecimal Representation of Selected Numbers (SPARC)|
Value |
float |
double |
long double |
|---|---|---|---|
|
+0 -0 |
00000000 80000000 |
0000000000000000 8000000000000000 |
00000000000000000000000000000000 80000000000000000000000000000000 |
|
+1.0 -1.0 |
3F800000 BF800000 |
3FF0000000000000 BFF0000000000000 |
3FFF00000000000000000000000000000 BFFF00000000000000000000000000000 |
|
+2.0 +3.0 |
40000000 40400000 |
4000000000000000 4008000000000000 |
40000000000000000000000000000000 40080000000000000000000000000000 |
|
+Infinity -Infinity |
7F800000 FF800000 |
7FF0000000000000 FFF0000000000000 |
7FFF00000000000000000000000000000 FFFF00000000000000000000000000000 |
|
NaN |
7FBFFFFF |
7FF7FFFFFFFFFFFF |
7FFF7FFFFFFFFFFFFFFFFFFFFFFFFFFF |
Table A-14 Hexadecimal Representation of Selected Numbers (Intel)
|
Value |
float |
double |
long double |
|---|---|---|---|
|
+0 -0 |
00000000 80000000 |
0000000000000000 0000000080000000 |
00000000000000000000 80000000000000000000 |
|
+1.0 -1.0 |
3F800000 BF800000 |
000000003FF00000 00000000BFF00000 |
3FFF8000000000000000 BFFF8000000000000000 |
|
+2.0 +3.0 |
40000000 40400000 |
0000000040000000 0000000040080000 |
40008000000000000000 4000C000000000000000 |
|
+Infinity -Infinity |
7F800000 FF800000 |
000000007FF00000 00000000FFF00000 |
7FFF8000000000000000 FFFF8000000000000000 |
|
NaN |
7FBFFFFF |
FFFFFFFF7FF7FFFF |
7FFFBFFFFFFFFFFFFFFF |
For further information, refer to the Numerical Computation Guide.
A pointer in C occupies four bytes. The NULL value pointer is equal to zero.
Arrays are stored with their elements in a specific storage order. The elements are actually stored in a linear sequence of storage elements.
C arrays are stored in row-major order; the last subscript in a multidimensional array varies the fastest.
String data types are simply arrays of char elements.
Table A-15 Automatic Array Types and Storage|
Type |
Maximum Number of Elements |
|---|---|
|
char |
268435455 |
|
short |
134217727 |
|
int |
67108863 |
|
long |
67108863 |
|
float |
67108863 |
|
double |
33554431 |
|
long double |
1677215 (SPARC) 22369621 (Intel) |
|
33554431 |
Static and global arrays can accommodate many more elements.
This section describes the results derived from applying the basic arithmetic operations to combinations of exceptional and ordinary floating-point values. The information that follows assumes that no traps or any other exception actions are taken.
The following tables explain the abbreviations:
Table A-16 Abbreviation Usage|
Abbreviation |
Meaning |
|---|---|
|
Num |
Subnormal or normal number |
|
Inf |
Infinity (positive or negative) |
|
NaN |
Not a number |
|
Uno |
Unordered |
The tables that follow describe the types of values that result from arithmetic operations performed with combinations of different types of operands.
Table A-17 Addition and Subtraction Results|
Right Operand |
||||
|
Left Operand |
0 |
Num |
Inf |
NaN |
|
0 |
0 |
Num |
Inf |
NaN |
|
Num |
Num |
See Note |
Inf |
NaN |
|
Inf |
Inf |
Inf |
See Note |
NaN |
|
NaN |
NaN |
NaN |
NaN |
NaN |
Num + Num could be Inf, rather than Num, when the result is too large (overflow). Inf + Inf = NaN when the infinities are of opposite sign.
|
|
Right Operand |
|||
|
Left Operand |
0 |
Num |
Inf |
NaN |
|
0 |
0 |
0 |
NaN |
NaN |
|
Num |
0 |
Num |
Inf |
NaN |
|
Inf |
NaN |
Inf |
Inf |
NaN |
|
NaN |
NaN |
NaN |
NaN |
NaN |
Table A-19 Division Results
|
|
Right Operand |
|||
|
Left Operand |
0 |
Num |
Inf |
NaN |
|
0 |
NaN |
0 |
0 |
NaN |
|
Num |
Inf |
Num |
0 |
NaN |
|
Inf |
Inf |
Inf |
NaN |
NaN |
|
NaN |
NaN |
NaN |
NaN |
NaN |
Table A-20 Comparison Results
|
|
Right Operand |
|||
|
Left Operand |
0 |
+Num |
+Inf |
NaN |
|
0 |
= |
< |
< |
Uno |
|
+Num |
> |
The result of the comparison |
< |
Uno |
|
+Inf |
> |
> |
= |
Uno |
|
NaN |
Uno |
Uno |
Uno |
Uno |
NaN compared with NaN is unordered, and results in inequality. +0 compares equal to -0.