### 4.7.9. Q-format

Q-formats are bit-level formats for storing numeric values. A Q-format enables you to specify:

• the number of bits used to represent values

• the numeric range within which all values fall.

#### Precision

The total number of bits you allow for storing a value determines the maximum precision with which a value can be defined. You can also regard it as determining the resolution, or smallest difference that can be distinguished between values.

#### Numeric range

In a Q-format you specify how many bits represent an integer value, and how many further bits represent subdivisions within each integer value. You can in effect specify ranges. For example:

• -1024 to (almost) +1024, where the most significant 11 bits represent a signed integer value

• 0 to (almost) +64, where the most significant 6 bits represent an unsigned integer value

• -1 to (almost) +1, where the most significant bit represents the sign.

In each case, all the remaining bits represent fractions between each integer value, and (almost) means a value one least-significant-bit less than the value given.

#### Notation

The form of a Q-format is Qn.m, where n is the number of bits before a notional binary point, and m is the number of bits that follow it. You can choose signed Q-format for ranges of values divided equally either side of zero, or unsigned Q-format for values that range upwards from zero.

For example, a 16-bit halfword can hold values in a signed Q4.12 format. This covers the range -8 to (almost) +8, with 65,536 unique values available in that range.

U Q15 is shorthand for unsigned Q1.15. This is a format for 16-bit values that gives 65,536 unique values in the range 0 to (almost) +2.

Q31 is shorthand for signed Q1.31. This is a format for 32-bit values that gives 4,294,967,296 unique values in the range -1 to (almost) +1.