with 22 bits for the mantissa and 9 for the exponent, while is a 64-bit floating-point value with 54 bits of mantissa and 9 bits exponent. is used for character processing, consisting of a 16-bit machine word holding a single 8-bit character in the least-significant bits. Arrays of type BYTE pack two 8-bit characters per 16-bit machine word. is an unsigned 16-bit integer type that, when used in a conditional expression, returns true if the least-significant bit is 1 and false otherwise. Unsigned integer arithmetic can be performed on LOGICAL data and any overflow is ignored. There is no equivalent of a modifier as found in Pascal, so is somewhat wasteful of memory when used only to store a single binary digit, although SPL offers bit string manipulation as an alternative. Like C, data is weakly typed, memory locations and variable storage are intermixed concepts, and one can access values directly through their locations. For instance, the code: INTEGER A,B,C LOGICAL D=A+2 defines three 16-bit integer variables, A, B and C, and then a LOGICAL, also a 16-bit value. The , like Pascal, means "is equivalent to", not "gets the value of", which uses in Algol-like languages. So the second line states "declare a variable D that is in the same memory location as A+2", which in this case is also the location of the variable C. This allows the same value to be read as an integer via C or a logical through D. This syntax may seem odd to modern readers where memory is generally a black box, but it has a number of important uses in systems programming where particular memory locations hold values from the underlying hardware. In particular, it allows one to define a variable that points to the front of a table of values, and then declare additional variables that point to individual values within the table. If the table location changes, only a single value has to change, the initial address, and all of the individual variables will automatically follow in their proper relative offsets. Pointers were declared by adding the modifier to any variable declaration, and the memory location of a variable dereferenced with the . Thus declares a pointer whose value contains the address of the variable A, not the value of A. can be used on either side of the assignment; puts the value of A into P, likely resulting