Объекты fi и целочисленные типы данных C

Примечание

Разделы этой темы сравнивают fi объект с типами данных с фиксированной точкой и операциями в С. В этих разделах, информация об ANSI® C адаптирован от Сэмюэла П. Харбисона и Гая Л. Стила-младшего, C: Справочное руководство, 3 изд., Prentice Hall, 1991.

Целочисленные типы данных

В этом разделе сравнивается численная область значений fi целочисленные типы данных к минимальной числовой области значений C целочисленных типов данных, принимая представление Комплемента Двух.

Целочисленные типы данных C

Многие компиляторы C поддерживают представление двух типов целочисленных данных со знаком. Следующая таблица показывает минимальные области значений целочисленных типов данных C, используя представление дополнения двух типов. Целочисленные области значений могут быть больше или равны показанным областям значений, но не могут быть меньше. Область значений long должно быть больше или равно области значений int, который должен быть больше или равен области значений short.

В представлении дополнения двух, знаковое целое число с n битами имеет область значений от 2n1 кому 2n11, включительно. Беззнаковое целое число с n битами имеет область значений от 0 до 2n1, включительно. Отрицательная сторона области значений имеет на одно значение больше, чем положительная сторона, и нуль представлен уникально.

Целый типМинимумМаксимум

signed char

–128

127

unsigned char

0

255

short int

–32,768

32,767

unsigned short

0

65,535

int

–32,768

32,767

unsigned int

0

65,535

long int

–2,147,483,648

2,147,483,647

unsigned long

0

4,294,967,295

fi целочисленные типы данных

В следующей таблице перечислены числовые области значений целочисленных типов данных fi объект, в частности эквивалентные целочисленным типам данных C. Области значений достаточно большие, чтобы включать представление дополнения двух, которое является единственным методом двоичного кодирования со знаком, поддерживаемым программным обеспечением Fixed-Point Designer™.

КонструкторПодписанныйРазмер словаДлина дробиМинимумМаксимумБлижайший эквивалент ANSI C

fi(x,1,n,0)

Да

n
(от 2 до 65 535)

0

2n1

2n11

Не применяется

fi(x,0,n,0)

Нет

n
(от 2 до 65 535)

0

0

2n1

Не применяется

fi(x,1,8,0)

Да

8

0

–128

127

signed char

fi(x,0,8,0)

Нет

8

0

0

255

unsigned char

fi(x,1,16,0)

Да

16

0

–32,768

32,767

short int

fi(x,0,16,0)

Нет

16

0

0

65,535

unsigned short

fi(x,1,32,0)

Да

32

0

–2,147,483,648

2,147,483,647

long int

fi(x,0,32,0)

Нет

32

0

0

4,294,967,295

unsigned long

Унарные преобразования

Унарные преобразования определяют, преобразуется ли один операнд до выполнения операции и как. В этом разделе рассматриваются унарные преобразования в ANSI C и fi объекты.

Обычные унарные преобразования ANSI C

Унарные преобразования в ANSI C автоматически применяются к операндам унарного !, -, ~, и * операторов и двоичных << и >> операторы, согласно следующей таблице:

Исходный тип операндаПреобразование ANSI C

char или short

int

unsigned char или unsigned short

int или unsigned int1

float

float

Массив T

Указатель на T

Функция, возвращающая T

Указатель на функцию, возвращающую T

1Если тип int не может представлять все значения исходного типа данных без переполнения, преобразованный тип unsigned int.

fi Обычные унарные преобразования

Следующая таблица показывает fi унарные преобразования:

Оператор Cfi Эквивалентныйfi Преобразование

!x

~ <reservedrangesplaceholder0>

Результатом является logical.

~ <reservedrangesplaceholder0>

bitcmp(x)

Результат совпадает с числовым типом операнда.

*x

Нет эквивалента

Не применяется

x<<n

bitshift (x, n)
положительный n

Результат совпадает с числовым типом операнда. Режим скругления всегда floor. Режим переполнения выполняется. 0-значные биты сдвигаются справа.

x>>n

bitshift(x,-n)

Результат совпадает с числовым типом операнда. Режим скругления всегда floor. Режим переполнения выполняется. 0-значные биты сдвигаются налево, если операнд не подписан или подписан и положителен. 1-значные биты сдвигаются налево, если операнд подписан и отрицателен.

+x

+x

Результат совпадает с числовым типом операнда.

-x

-x

Результат совпадает с числовым типом операнда. Режим переполнения выполняется. Для примера переполнение может произойти, когда вы отменяете беззнаковое fi или самое отрицательное значение подписанного fi.

Двоичные преобразования

В этом разделе описываются преобразования, которые происходят, когда операнды двоичного оператора являются различными типами данных.

Обычные двоичные преобразования ANSI C

В ANSI C операнды двоичного оператора должны быть одного типа. Если они отличаются, один преобразуется в тип другого согласно первому применимому преобразованию в следующей таблице:

Тип одного операндаТип другого операндаПреобразование ANSI C

long double

Любой

long double

double

Любой

double

float

Любой

float

unsigned long

Любой

unsigned long

long

unsigned

long или unsigned long1

long

int

long

unsigned

int или unsigned

unsigned

int

int

int

1Тип long используется только в том случае, если оно может представлять все значения типа unsigned.

fi Обычные двоичные преобразования

Когда один из операндов двоичного оператора (+, –, *, .*) является fi объект и другой является MATLAB® встроенный числовой тип, затем non - fi операнд преобразуется в fi объект перед выполнением операции согласно следующей таблице:

Тип одного операндаТип другого операндаСвойства другого операнда после преобразования в объект fi

fi

double or single

  • Signed = такой же, как и исходное fi операнд

  • WordLength = такой же, как и исходное fi операнд

  • FractionLength = установите лучшую точность

fi

int8

  • Signed = 1

  • WordLength = 8

  • FractionLength = 0

fi

uint8

  • Signed = 0

  • WordLength = 8

  • FractionLength = 0

fi

int16

  • Signed = 1

  • WordLength = 16

  • FractionLength = 0

fi

uint16

  • Signed = 0

  • WordLength = 16

  • FractionLength = 0

fi

int32

  • Signed = 1

  • WordLength = 32

  • FractionLength = 0

fi

uint32

  • Signed = 0

  • WordLength = 32

  • FractionLength = 0

fi

int64

  • Signed = 1

  • WordLength = 64

  • FractionLength = 0

fi

uint64

  • Signed = 0

  • WordLength = 64

  • FractionLength = 0

Обработка переполнения

В следующих разделах сравнивается, как программное обеспечение ANSI C и Fixed-Point Designer обрабатывает переполнения.

Обработка переполнения ANSI C

В ANSI C результатом целочисленных операций со знаком является любое значение, генерируемое командой машины, используемой для реализации операции. Поэтому ANSI C не имеет правил для обработки целочисленного переполнения со знаком.

Результаты беззнаковых целочисленного переполнения переносятся в ANSI C.

Обработка переполнения FI

Сложение и умножение с fi объекты дают результаты, которые могут быть точно представлены fi объект, до размеров слова 65 535 бит или доступная память на вашей машине. Однако это не относится к делению, потому что многие отношения приводят к бесконечным двоичным выражениям. Вы можете выполнить деление с fi объекты, использующие divide функция, которая требует, чтобы вы явным образом задали числовой тип результата.

Условия, при которых fi переполнение объекта, и полученные результаты определяются связанными fimath объект. Определенные признаки переполнения можно задать отдельно для сумм (включая различия) и продуктов. См. следующую таблицу:

Свойства объекта fimath, связанные с обработкой переполненияЗначение свойстваОписание

OverflowAction

'saturate'

Переливы насыщаются до максимального или минимального значения в области значений.

'wrap'

Переполнения оборачиваются с помощью арифметики по модулю, если она не подписана, перенос дополнения двух, если она подписана.

ProductMode

'FullPrecision'

Сохраняются результаты полной точности. Переполнение не происходит. Выдается ошибка, если получившийся размер слова больше MaxProductWordLength.

Правила вычисления итогового слова продукта и длин дробей приведены в fimath Object Properties в Описании свойства.

 

'KeepLSB'

Сохраняются наименьшие значимые биты продукта. Сохранена полная точность, но переполнение возможно. Это поведение моделирует целочисленные операции на C языке.

The ProductWordLength свойство определяет полученный размер слова. Если ProductWordLength больше, чем необходимо для полностью точного продукта, тогда результат сохранен в наименее значимых битах. Если ProductWordLength меньше, чем необходимо для продукта с полной точностью, тогда происходит переполнение.

Правило для вычисления длины результирующей дроби продукта приведено в fimath Object Properties в Описании свойства.

 

'KeepMSB'

Сохраняются самые значительные биты продукта. Переполнение предотвращено, но точность может быть потеряна.

The ProductWordLength свойство определяет полученный размер слова. Если ProductWordLength больше, чем необходимо для полноточного продукта, тогда результат сохранен в самых значимых битах. Если ProductWordLength меньше, чем необходимо для продукта с полной точностью, тогда происходит округление.

Правило для вычисления длины результирующей дроби продукта приведено в fimath Object Properties в Описании свойства.

 

'SpecifyPrecision'

Можно задать как длину слова, так и длину дроби полученного продукта.

ProductWordLength

Положительное целое число

Размер слова продукта результатов при ProductMode является 'KeepLSB', 'KeepMSB', или 'SpecifyPrecision'.

MaxProductWordLength

Положительное целое число

Максимально допустимый продукт размера слова при ProductMode является 'FullPrecision'. Значение по умолчанию является 65 535 битами. Это свойство может помочь убедиться, что ваша симуляция не превышает ваши требования к оборудованию.

ProductFractionLength

Целое число

Длина дроби продукта возникает при ProductMode является 'Specify Precision'.

SumMode

'FullPrecision'

Сохраняются результаты полной точности. Переполнение не происходит. Выдается ошибка, если получившийся размер слова больше MaxSumWordLength.

Правила вычисления итогового слова и длин дробей приведены в fimath Свойства в Описании свойства.

 

'KeepLSB'

Сохраняются наименее значимые биты суммы. Сохранена полная точность, но переполнение возможно. Это поведение моделирует целочисленные операции на C языке.

The SumWordLength свойство определяет полученный размер слова. Если SumWordLength больше, чем необходимо для полной точности суммы, тогда результат сохранен в наименее значимых битах. Если SumWordLength меньше, чем необходимо для полной точности суммы, тогда происходит переполнение.

Правило для вычисления длины результирующей суммарной дроби приведено в fimath Object Properties в Описании свойства.

 

'KeepMSB'

Сохраняются самые значительные биты суммы. Переполнение предотвращено, но точность может быть потеряна.

The SumWordLength свойство определяет полученный размер слова. Если SumWordLength больше, чем необходимо для полной точности суммы, тогда результат сохранен в самых значимых битах. Если SumWordLength меньше, чем необходимо для полной точности суммы, тогда происходит округление.

Правило для вычисления длины результирующей суммарной дроби приведено в fimath Object Properties в Описании свойства.

 

'SpecifyPrecision'

Можно задать как длину слова, так и длину дроби получившейся суммы.

SumWordLength

Положительное целое число

Размер слова суммы результатов когда SumMode является 'KeepLSB', 'KeepMSB', или 'SpecifyPrecision'.

MaxSumWordLength

Положительное целое число

Максимально допустимый размер слова при SumMode является 'FullPrecision'. Значение по умолчанию является 65 535 битами. Это свойство может помочь убедиться, что ваша симуляция не превышает ваши требования к оборудованию.

SumFractionLength

Целое число

Длина дроби суммы возникает при SumMode является 'SpecifyPrecision'.