Примечание
Разделы этой темы сравнивают fi
объект с типами данных с фиксированной точкой и операциями в С. В этих разделах, информация об ANSI® C адаптирован от Сэмюэла П. Харбисона и Гая Л. Стила-младшего, C: Справочное руководство, 3 изд., Prentice Hall, 1991.
В этом разделе сравнивается численная область значений fi
целочисленные типы данных к минимальной числовой области значений C целочисленных типов данных, принимая представление Комплемента Двух.
Многие компиляторы C поддерживают представление двух типов целочисленных данных со знаком. Следующая таблица показывает минимальные области значений целочисленных типов данных C, используя представление дополнения двух типов. Целочисленные области значений могут быть больше или равны показанным областям значений, но не могут быть меньше. Область значений long
должно быть больше или равно области значений int
, который должен быть больше или равен области значений short
.
В представлении дополнения двух, знаковое целое число с n битами имеет область значений от кому , включительно. Беззнаковое целое число с n битами имеет область значений от 0 до , включительно. Отрицательная сторона области значений имеет на одно значение больше, чем положительная сторона, и нуль представлен уникально.
Целый тип | Минимум | Максимум |
---|---|---|
| –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 | Указатель на T |
Функция, возвращающая T | Указатель на функцию, возвращающую T |
1Если тип int
не может представлять все значения исходного типа данных без переполнения, преобразованный тип unsigned int
.
Следующая таблица показывает fi
унарные преобразования:
Оператор C | fi Эквивалентный | fi Преобразование |
---|---|---|
|
| Результатом является |
|
| Результат совпадает с числовым типом операнда. |
| Нет эквивалента | Не применяется |
|
| Результат совпадает с числовым типом операнда. Режим скругления всегда |
|
| Результат совпадает с числовым типом операнда. Режим скругления всегда |
|
| Результат совпадает с числовым типом операнда. |
|
| Результат совпадает с числовым типом операнда. Режим переполнения выполняется. Для примера переполнение может произойти, когда вы отменяете беззнаковое |
В этом разделе описываются преобразования, которые происходят, когда операнды двоичного оператора являются различными типами данных.
В ANSI C операнды двоичного оператора должны быть одного типа. Если они отличаются, один преобразуется в тип другого согласно первому применимому преобразованию в следующей таблице:
Тип одного операнда | Тип другого операнда | Преобразование ANSI C |
---|---|---|
| Любой |
|
| Любой |
|
| Любой |
|
| Любой |
|
|
|
|
|
|
|
|
|
|
|
|
|
1Тип long
используется только в том случае, если оно может представлять все значения типа unsigned
.
Когда один из операндов двоичного оператора (+
, –, *
, .*
) является fi
объект и другой является MATLAB® встроенный числовой тип, затем non - fi
операнд преобразуется в fi
объект перед выполнением операции согласно следующей таблице:
Тип одного операнда | Тип другого операнда | Свойства другого операнда после преобразования в объект fi |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
В следующих разделах сравнивается, как программное обеспечение ANSI C и Fixed-Point Designer обрабатывает переполнения.
В ANSI C результатом целочисленных операций со знаком является любое значение, генерируемое командой машины, используемой для реализации операции. Поэтому ANSI C не имеет правил для обработки целочисленного переполнения со знаком.
Результаты беззнаковых целочисленного переполнения переносятся в ANSI C.
Сложение и умножение с fi
объекты дают результаты, которые могут быть точно представлены fi
объект, до размеров слова 65 535 бит или доступная память на вашей машине. Однако это не относится к делению, потому что многие отношения приводят к бесконечным двоичным выражениям. Вы можете выполнить деление с fi
объекты, использующие divide
функция, которая требует, чтобы вы явным образом задали числовой тип результата.
Условия, при которых fi
переполнение объекта, и полученные результаты определяются связанными fimath
объект. Определенные признаки переполнения можно задать отдельно для сумм (включая различия) и продуктов. См. следующую таблицу:
Свойства объекта fimath, связанные с обработкой переполнения | Значение свойства | Описание |
---|---|---|
|
| Переливы насыщаются до максимального или минимального значения в области значений. |
| Переполнения оборачиваются с помощью арифметики по модулю, если она не подписана, перенос дополнения двух, если она подписана. | |
|
| Сохраняются результаты полной точности. Переполнение не происходит. Выдается ошибка, если получившийся размер слова больше Правила вычисления итогового слова продукта и длин дробей приведены в fimath Object Properties в Описании свойства. |
| Сохраняются наименьшие значимые биты продукта. Сохранена полная точность, но переполнение возможно. Это поведение моделирует целочисленные операции на C языке. The Правило для вычисления длины результирующей дроби продукта приведено в fimath Object Properties в Описании свойства. | |
| Сохраняются самые значительные биты продукта. Переполнение предотвращено, но точность может быть потеряна. The Правило для вычисления длины результирующей дроби продукта приведено в fimath Object Properties в Описании свойства. | |
| Можно задать как длину слова, так и длину дроби полученного продукта. | |
| Положительное целое число | Размер слова продукта результатов при |
| Положительное целое число | Максимально допустимый продукт размера слова при |
| Целое число | Длина дроби продукта возникает при |
|
| Сохраняются результаты полной точности. Переполнение не происходит. Выдается ошибка, если получившийся размер слова больше Правила вычисления итогового слова и длин дробей приведены в fimath Свойства в Описании свойства. |
| Сохраняются наименее значимые биты суммы. Сохранена полная точность, но переполнение возможно. Это поведение моделирует целочисленные операции на C языке. The Правило для вычисления длины результирующей суммарной дроби приведено в fimath Object Properties в Описании свойства. | |
| Сохраняются самые значительные биты суммы. Переполнение предотвращено, но точность может быть потеряна. The Правило для вычисления длины результирующей суммарной дроби приведено в fimath Object Properties в Описании свойства. | |
| Можно задать как длину слова, так и длину дроби получившейся суммы. | |
| Положительное целое число | Размер слова суммы результатов когда |
| Положительное целое число | Максимально допустимый размер слова при |
| Целое число | Длина дроби суммы возникает при |