Примечание
Разделы в этом разделе сравнивают fi объект с фиксированными типами данных и операциями в C. В этих разделах информация по ANSI ® C адаптирована от Сэмюэла П. Харбисона и Гая Л. Стила-младшего, C: Справочное руководство, 3-е изд., Прентис Холл, 1991.
В этом разделе сравнивается численный диапазон fi целочисленные типы данных до минимального числового диапазона C целочисленных типов данных, предполагая представление комплемента типа Two.
Многие компиляторы C поддерживают двухмерное представление типа данных со знаком целого числа. В следующей таблице показаны минимальные диапазоны целочисленных типов данных C с использованием представления дополнения. Целочисленные диапазоны могут быть больше или равны показанным диапазонам, но не могут быть меньше. Диапазон long должно быть больше или равно диапазону int, который должен быть больше или равен диапазону short.
В представлении дополнения двух, целое число со знаком с n битами имеет диапазон от − 1 − 1 − 1 включительно. Целое число без знака с n битами имеет диапазон до 2n − 1 включительно. Отрицательная сторона диапазона имеет на один больше значения, чем положительная сторона, и ноль представлен однозначно.
| Целочисленный тип | Минимум | Максимум |
|---|---|---|
| –128 | 127 |
| 0 | 255 |
| –32,768 | 32,767 |
| 0 | 65,535 |
| –32,768 | 32,767 |
| 0 | 65,535 |
| –2,147,483,648 | 2,147,483,647 |
| 0 | 4,294,967,295 |
В следующей таблице перечислены числовые диапазоны целочисленных типов данных fi объект, в частности те, которые эквивалентны C-целочисленным типам данных. Диапазоны достаточно велики, чтобы разместить представление дополнения двух, которое является единственным способом двоичного кодирования со знаком, поддерживаемым программным обеспечением Fixed-Point Designer™.
| Конструктор | Подписанный | Длина слова | Длина фракции | Минимум | Максимум | Ближайший эквивалент ANSI C |
|---|---|---|---|---|---|---|
| Да | n | 0 | Неприменимо | ||
| Нет | n | 0 | 0 | Неприменимо | |
| Да | 8 | 0 | –128 | 127 |
|
| Нет | 8 | 0 | 0 | 255 |
|
| Да | 16 | 0 | –32,768 | 32,767 |
|
| Нет | 16 | 0 | 0 | 65,535 |
|
| Да | 32 | 0 | –2,147,483,648 | 2,147,483,647 |
|
| Нет | 32 | 0 | 0 | 4,294,967,295 |
|
Унарные преобразования определяют, преобразуется ли и каким образом один операнд перед выполнением операции. В этом разделе рассматриваются унарные преобразования в ANSI C и fi объекты.
Унарные преобразования в ANSI C автоматически применяются к операндам унарных !, -, ~, и * операторов и двоичного << и >> операторов в соответствии со следующей таблицей:
| Исходный тип операнда | Преобразование ANSI C |
|---|---|
|
|
|
|
|
|
Массив T | Указатель на Т |
Функция, возвращающая Т | Указатель на функцию, возвращающую Т |
Тип 1If int не может представлять все значения исходного типа данных без переполнения, преобразованный тип unsigned int.
В следующей таблице показаны fi унарные преобразования:
| Оператор C | fi Эквивалент | fi Преобразование |
|---|---|---|
| ~ | Результат: |
~ |
| Результат имеет тот же числовой тип, что и операнд. |
| Нет эквивалента | Неприменимо |
|
| Результат имеет тот же числовой тип, что и операнд. Режим скругления всегда |
|
| Результат имеет тот же числовой тип, что и операнд. Режим скругления всегда |
|
| Результат имеет тот же числовой тип, что и операнд. |
|
| Результат имеет тот же числовой тип, что и операнд. Режим переполнения соблюдается. Например, переполнение может произойти, когда вы отрицаете неподписанный |
В этом разделе описываются преобразования, которые происходят, когда операнды двоичного оператора имеют различные типы данных.
В ANSI C операнды двоичного оператора должны быть одного типа. Если они отличаются, один из них преобразуется в тип другого в соответствии с первым применимым преобразованием в следующей таблице:
| Тип одного операнда | Тип другого операнда | Преобразование ANSI C |
|---|---|---|
| Любой |
|
| Любой |
|
| Любой |
|
| Любой |
|
|
|
|
|
|
|
|
|
|
|
|
|
1Type long используется только в том случае, если он может представлять все значения типа unsigned.
Когда один из операндов бинарного оператора (+, –, *, .*) является fi объект, а другой является встроенным числовым типом MATLAB ®, то нет -fi операнд преобразуется в fi объект перед выполнением операции, согласно следующей таблице:
| Тип одного операнда | Тип другого операнда | Свойства другого операнда после преобразования в объект fi |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
В следующих разделах сравнивается обработка переполнений ПО ANSI C и Fixed-Point Designer.
В ANSI C результатом операций со знаком целого числа является любое значение, полученное командой машины, используемой для реализации операции. Поэтому ANSI C не имеет правил для обработки переполнения целого числа со знаком.
Результаты переполнения целого числа без знака переносятся в ANSI C.
Сложение и умножение с fi объекты дают результаты, которые могут быть точно представлены fi объект, длиной до 65 535 бит или доступная память на компьютере. Однако это не относится к делению, поскольку многие отношения приводят к бесконечным двоичным выражениям. Можно выполнить разделение с помощью fi с использованием divide , которая требует явного указания числового типа результата.
Условия, при которых fi переполнение объекта и полученные результаты определяются соответствующим fimath объект. Определенные признаки переполнения можно указать отдельно для сумм (включая разницы) и продуктов. См. следующую таблицу:
| Свойства объекта fimath, связанные с обработкой переполнения | Значение свойства | Описание |
|---|---|---|
|
| Переполнения насыщаются до максимального или минимального значения в диапазоне. |
| Переполнение обтекания с использованием арифметики по модулю, если оно не подписано, и два дополнения, если оно подписано. | |
|
| Результаты с полной точностью сохраняются. Переполнение не происходит. Если результирующая длина слова больше, чем Правила вычисления результирующих длин слов и дробей изделия приведены в свойствах объекта fimath в ссылке на свойство. |
| Сохраняются младшие биты продукта. Сохраняется полная точность, но возможно переполнение. Это поведение моделирует целочисленные операции языка C. Правило для вычисления результирующей длины доли продукта задается в свойствах объекта fimath в ссылке на свойство. | |
| Сохраняются наиболее значительные биты продукта. Переполнение предотвращено, но точность может быть потеряна. Правило для вычисления результирующей длины доли продукта задается в свойствах объекта fimath в ссылке на свойство. | |
| Можно указать как длину слова, так и длину дроби результирующего изделия. | |
| Положительное целое число | Длина слова результата продукта при |
| Положительное целое число | Максимальная длина слова продукта, допустимая при |
| Целое число | Длина фракции продукта, если |
|
| Результаты с полной точностью сохраняются. Переполнение не происходит. Если результирующая длина слова больше, чем Правила вычисления суммарных длин слов и дробей приведены в свойствах объекта fimath в ссылке на свойство. |
| Сохраняются наименьшие значащие биты суммы. Сохраняется полная точность, но возможно переполнение. Это поведение моделирует целочисленные операции языка C. Правило вычисления результирующей длины суммарной дроби задается в свойствах объекта fimath в ссылке на свойство. | |
| Сохраняются наиболее значимые биты суммы. Переполнение предотвращено, но точность может быть потеряна. Правило вычисления результирующей длины суммарной дроби задается в свойствах объекта fimath в ссылке на свойство. | |
| Можно указать длину слова и длину дроби результирующей суммы. | |
| Положительное целое число | Длина слова суммы получается, когда |
| Положительное целое число | Максимальная длина слова sum, допустимая при |
| Целое число | Длина дроби суммы получается, когда |