Номер с фиксированной точкой
Процесс смещения, описанный выше, является ключом к пониманию представления номера с фиксированной точкой.Чтобы представить действительное число в компьютерах (или любом другом аппаратном обеспечении в целом), мы можем определить тип числа с фиксированной точкой, просто неявно фиксируя двоичную точку в некоторой позиции числа.Затем мы просто будем придерживаться этого неявного соглашения, когда представляем числа.
Для концептуального определения типа фиксированной точки нам нужны только два параметра:
- ширина представления числа,и
- положение двоичной точки в числе
Мы будем использовать обозначения, зафиксированные в остальной части этой статьи, где w обозначает количество битов, используемых в целом (шириначисло), а b обозначает позицию двоичной точки, считая от младшего значащего бита (считая от 0).
..................................
Например, фиксированный <8,3> обозначает 8-битное число с фиксированной запятой, из которых 3 самых правых бита являются дробными.Следовательно, битовая комбинация:
0 0 0 1 0 1 1 0
представляет действительное число:
00010.1102
= 1 * 2 ^ 1+ 1 * 2 ^ -1 + 1 * 2 ^ -1
= 2 + 0,5 + 0,25
= 2,75
Обратите внимание, что на компьютере немного скороговорка можетпредставляет что угодно.Поэтому тот же битовый шаблон, если мы «приведем» его к другому типу, например, к фиксированному типу <8,5>, будет представлять число:
000.101102
= 1 * 2 ^-1 + 1 * 2 ^ -3 + 1 * 2 ^ -4
= 0,5 + 0,125 + 0,0625
= 0,6875
Если мы будем рассматривать этот битовый шаблон как целое число, он представляет число:
101102
= 1 * 2 ^ 4 + 1 * 2 ^ 2 + 1 * 2 ^ 1
= 16 + 4 + 2
= 22 * 1052 *
Использование номера с фиксированной точкой в C
C не имеет собственного "типа" для номера с фиксированной точкой.Однако из-за природы представления с фиксированной запятой она нам просто не нужна.Напомним, что все арифметические операции с числами с фиксированной точкой совпадают с целыми числами, мы можем просто повторно использовать целочисленный тип int в C для выполнения арифметики с фиксированной точкой.Положение двоичной точки имеет значение только в тех случаях, когда мы печатаем ее на экране или выполняем арифметику с другим «типом» (например, при добавлении int к fixed <32,6>).